Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.09.2008, 19:03   #21
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

М-да-а...
Послушайте, а вам не кажется, что, например, этот кусок:
Код:
Form3.ComboBox3.Items.Clear;
Form3.Table1.Active:=False;
Form3.Table1.DatabaseName:='yantary';
Form3.Table1.TableName:='kod.dbf';
Form3.Table1.Active:=true;
strvl:=form3.Table1.RecordCount;
Form3.Table1.First ;
for i:=0 to strvl-1 do begin
Form3.ComboBox3.Items.Add(form3.Table1.FieldByName('NOMER_KOD').AsString );
Form3.Table1.Next ;
end;
// Заполнение списка описания Подкомплектов для   Form3.ComboBox6
Form3.ComboBox6.Items.Clear;
Form3.Table1.Active:=False;
Form3.Table1.DatabaseName:='yantary';
Form3.Table1.TableName:='kod.dbf';
Form3.Table1.Active:=true;
strvl:=form3.Table1.RecordCount;
Form3.Table1.First ;
for i:=0 to strvl-1 do begin
Form3.ComboBox6.Items.Add(form3.Table1.FieldByName('OPIS_KOD').AsString );
Form3.Table1.Next ;
end;
вполне заменяется на:
Код:
Form3.ComboBox3.Items.Clear;
Form3.Table1.Active:=False;
Form3.Table1.DatabaseName:='yantary';
Form3.Table1.TableName:='kod.dbf';
Form3.Table1.Active:=true;
strvl:=form3.Table1.RecordCount;
Form3.Table1.First ;
for i:=0 to strvl-1 do begin
Form3.ComboBox3.Items.Add(form3.Table1.FieldByName('NOMER_KOD').AsString );
Form3.ComboBox6.Items.Add(form3.Table1.FieldByName('OPIS_KOD').AsString );
Form3.Table1.Next ;
end;
Второе: зачем вы в юните Unit3, родной для Form3, все везде указываете принадлежность явно - Form3. и т.д. Это абсолютно лишнее. Когда вы из другой юниты ссылаетесь на нее (как на внешнюю) - это оправданно, а тут...
Дальше. Ну перестаньте же вставлять лишние команды! Например:
Код:
Form3.Table1.Close;
Form3.Table1.EmptyTable;
Form3.Table1.Active:=False;
Первая и последняя строка - это одно и то же! Зачем повторно пытаться закрыть уже закрытую таблицу???
У вас такая путаница в назначении имен таблиц...
Попробуйте поставить брейкпойнты на каждый EmptyTable и посмотрите, закрыта ли таблица, которую вы хотите обнулить.
Цитата:
ругается на любую команду после
Form3.Table1.EmptyTable;
Дайте время на выполнение очистки таблицы, хотя бы вставьте после этой строки
Application.ProcessMessages
mihali4 вне форума Ответить с цитированием
Старый 13.09.2008, 21:04   #22
sergey113
Форумчанин
 
Регистрация: 12.12.2007
Сообщений: 104
По умолчанию

1 Код подправил... тут конечно я что-то недоглядел тупо конечно..


2 Использую полное название всегда так как мне так удобнее у меня никогда нет вопросо что и куда я присваиваю .. мне кажется это очень удобно.

3 Брекпоинты ставил .. при постановке на предыдущую строку ошибки нет .. при постановке на Form3.Table1.EmptyTable; велетает сразу...

4 постановка строки Application.ProcessMessages; ничего не дала ... ошибка повторяется...

5 Не совсем понял про названия таблиц - какая должна быть система...
sergey113 вне форума Ответить с цитированием
Старый 13.09.2008, 21:23   #23
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
при постановке на Form3.Table1.EmptyTable; велетает сразу
В процессе выполнения EmptyTable?
Ну так вот же она - причина! Ставите точку останова на строку с EmptyTable, в перечень просматриваемых переменных (ALT-CTRL-W) добавляете значение переменной Table1.Active и смотрите...
Наверняка кто-то не дает закрыть таблицу перед очисткой, т.е. к моменту выполнения Table1.EmptyTable значение Table1.Active равно TRUE.
То есть вы обратились к конкретной таблице (файлу!!!) и из другой формы тоже... Таблица-файл заблокирован из другой формы!
Мой вам совет. Пользуйтесь DataModule и тогда вам будет гораздо проще обращаться к таблицам и не будет возникать путаницы и конфликтов при обращении...
Цитата:
Использую полное название всегда так как мне так удобнее у меня никогда нет вопросо что и куда я присваиваю .. мне кажется это очень удобно.
Ну еще раз поясню. Если нет "полного названия", значит обращение идет отсюда, из этой юниты. Например в Unit1 строка Edit1.Text:='aaa' будет означать то же, что и Form1.Edit1.Text:='aaa'. А вот в этой же юните строка Form3.Edit1.Text:='aaa' будет означать, что Edit1.Text в Form1 останется неизменным, а вот в Form3 изменится...
Из другой юниты вы "по-простому" обратиться не сможете при всем желании... Обязательно придется указать принадлежность явно.
Конечно, то, как вы делаете - это не ошибка, но... Вы хотите иметь как можно более скоростной процессор, а при этом сами замедляете свою работу внесением лишних, не несущих нагрузки, слов, фраз...

Последний раз редактировалось mihali4; 13.09.2008 в 21:32.
mihali4 вне форума Ответить с цитированием
Старый 13.09.2008, 22:27   #24
sergey113
Форумчанин
 
Регистрация: 12.12.2007
Сообщений: 104
По умолчанию

Решил переписать программу как Вы сказали .. те с использованием DataModule ... Создал и вставил туда 6 table и Datasource по числу мне нужных, чтобы они всегда были true и я их закрывал когда надо а потом открывал.. закоментировал все строки и пошел править код..
и на второй же строке
strvl:=DataModule4.Table1.RecordCou nt;
такая ошибка .. что я не так делаю?
---------------------------
Project1
---------------------------
Access violation at address 004B62D5 in module 'Project1.exe'. Read of address 0000005C.
---------------------------
ОК
---------------------------
sergey113 вне форума Ответить с цитированием
Старый 13.09.2008, 22:40   #25
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Создал и вставил туда 6 table и Datasource по числу мне нужных, чтобы они всегда были true
"чтобы они всегда были true" - не понял, это про что?
Выложите-ка проект "прицепом" в архиве.
mihali4 вне форума Ответить с цитированием
Старый 13.09.2008, 22:47   #26
sergey113
Форумчанин
 
Регистрация: 12.12.2007
Сообщений: 104
По умолчанию

Под true я иммел ввиду всегда активные .. чтоб не путатся .. а то у меня куча ошибок, мне надо все упростить.
Вот программа там две копии что у меня сейчас одна вся закоментированая (та что я сейчас пытаюсь оживить) вторая старый бекап определенной даты.
Вложения
Тип файла: rar Программа.rar (713.4 Кб, 7 просмотров)
sergey113 вне форума Ответить с цитированием
Старый 13.09.2008, 23:07   #27
sergey113
Форумчанин
 
Регистрация: 12.12.2007
Сообщений: 104
По умолчанию

я изменил названия части таблиц для большей прозрачности..
Вот они ..
Вложения
Тип файла: rar !baza!.rar (1.3 Кб, 6 просмотров)
sergey113 вне форума Ответить с цитированием
Старый 13.09.2008, 23:42   #28
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Вот как нужно изменить файл проекта:
Код:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2},
  Unit3 in 'Unit3.pas' {Form3};
  Unit4 in 'Unit4.pas' {DataModule4: TDataModule};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TDataModule4, DataModule4);
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);
  Application.Run;
end.
Модуль данных должен создаваться ПЕРВЫМ.
Ошибка у вас возникает из-за того, что в момент создания Form1 вы пытаетесь обратиться к еще не созданному DataModule4.
Кстати, лучше все-таки не держать открытыми таблицы, а делать так:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
// Заполнение списков ПУГ для  Form1.ComboBox1
Form1.ComboBox1.Items.Clear;
DataModule4.Table1.Open;
strvl:=DataModule4.Table1.RecordCount;
...
mihali4 вне форума Ответить с цитированием
Старый 14.09.2008, 19:38   #29
sergey113
Форумчанин
 
Регистрация: 12.12.2007
Сообщений: 104
По умолчанию

Спасибо за очень толковые советы ... переписал программу код уменьшился. EmptyTable все равно выдавал ошибку Table is busy пока я выполнял этот метод с Form2 (по нажатию кнопки с этой формы открываалсь Form3 и производилась очистка таблицы), как только я переместил очистку таблицы при загрузке формы 3 все стало работать нормально... теперь просто добавлю очистку при закрытии Form3 и будет все как я хотел.
sergey113 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу сделать цифровые часы sid Общие вопросы Delphi 25 16.12.2009 05:06
Не могу сделать выборку с нужными полями, помогите чайнику! kadet.rus Microsoft Office Access 2 26.04.2008 14:12
Excel max 256 строк VS user надо 300 строк Exo Microsoft Office Excel 3 10.01.2008 17:14
Сортировка в таблице... Gektor Паскаль, Turbo Pascal, PascalABC.NET 2 23.09.2007 12:10
Как сделать, чтобы один элемент списка в ComboBox писался в несколько строк? Andr Общие вопросы Delphi 5 15.08.2007 22:24