Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 590

/ вопрос открыт /

Приветствую, уважаемые эксперты!
Я сейчас разбираю приложение в котором база данных paradox и работа
с ней ведётся с помощью Table1: TTable; Я импортировал все таблицы БД в
Access и хочу работать с компонентами ADO. В приложении я даю 2 процедуры работы старой БД.Не могли бы вы поправить код, сделать его по компоненты ADO.

Приложение:
  1.  
  2. procedure TZadanForm.FormShow(Sender: TObject);
  3. begin
  4.  
  5.  
  6.  
  7. with MainForm.Table1 do
  8. begin
  9. if Active then Close;
  10.  
  11. Open;
  12. First;
  13.  
  14. begin
  15. ZadComboBox.Items.Add(FieldByName('TxtZ').AsString);
  16. Next;
  17. end;
  18.  
  19. end;
  20.  
  21.  
  22. NRepPos.Clear;
  23. NOrientPos.Clear;
  24. NVidFile.Clear;
  25. NRepFile.Clear;
  26. NOrientFile.Clear;
  27.  
  28. NVyd:=TStringList.Create;
  29. NPhas:=TStringList.Create;
  30. NDKS:=TStringList.Create;
  31. NSvD:=TStringList.Create;
  32. NTGR:=TStringList.Create;
  33. NVisD:=TStringList.Create;
  34. NVyd.Sorted :=false;
  35. NPhas.Sorted :=false;
  36. NDKS.Sorted :=false;
  37. NSvD.Sorted :=false;
  38. NTGR.Sorted :=false;
  39. NVisD.Sorted :=false;
  40.  
  41.  
  42.  
  43. end;
  44.  
  45.  
  46. procedure TZadanForm.LoadParamZadan(NZad:integer);
  47. begin
  48. with MainForm.Table1 do
  49. begin
  50.  
  51. TableName:='spiszad';
  52. Open;
  53.  
  54.  
  55.  
  56. Label4.Caption:=FieldByName('NPosVideo').AsString;
  57. Label6.Caption:=FieldByName('NPosOrientir').AsString;
  58. Label8.Caption:=FieldByName('NPosReper').AsString;
  59. Label23.Caption:=FieldByName('NFile').AsString;
  60. Label25.Caption:=FieldByName('NFileOrientir').AsString;
  61. Label24.Caption:=FieldByName('NFileReper').AsString;
  62. Label12.Caption:=FieldByName('EndFileMC').AsString;
  63. Label22.Caption:=FieldByName('EndFileXLS').AsString;
  64. if FieldByName('PrSl').AsInteger=0
  65.  
  66. kod:=FieldByName('NumZ').AsInteger;
  67. objb:=FieldByName('NameO1').AsString;
  68. objr:=FieldByName('NameO2').AsString;
  69. objo:=FieldByName('NameO3').AsString;
  70.  
  71. CurrZad.NumZ:=FieldByName('NumZ').AsInteger;
  72. CurrZad.TxtZ:=FieldByName('TxtZ').AsString;
  73. CurrZad.NPosVideo:=FieldByName('NPosVideo').AsInteger;
  74. CurrZad.NPosReper:=FieldByName('NPosReper').AsInteger;
  75. CurrZad.NPosOrientir:=FieldByName('NPosOrientir').AsInteger;
  76. CurrZad.NFileReper:=FieldByName('NFileReper').AsInteger;
  77. CurrZad.NFileOrientir:=FieldByName('NFileOrientir').AsInteger;
  78. if FieldByName('PrSl').AsInteger=0 then CurrZad.PrSl:=false else CurrZad.PrSl:=true;
  79. // CurrZad.PaspFile:=FieldByName('PaspXLS').AsString;
  80. CurrZad.FileMC:=FieldByName('EndFileMC').AsString;
  81. CurrZad.FileXls:=FieldByName('EndFileXls').AsString;
  82. CurrZad.PathMC:=FieldByName('PathMC').AsString;
  83. CurrZad.PathXls:=FieldByName('PathXls').AsString;
  84. CurrZad.NF:=FieldByName('NFile').AsInteger;
  85. Close;
  86. end;
  87.  
  88. end;
  89.  


GAZ Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: GAZ (статус: Посетитель)
Вопрос отправлен: 2 апреля 2009, 18:19
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 11; последнее сообщение — 3 апреля 2009, 14:29; участников в обсуждении: 2.
Вадим К

Вадим К (статус: Академик), 2 апреля 2009, 18:23 [#1]:

Вторая процедура я так понимаю - это найти нужную запись в базе и перенести поля в ГУИ?
Хотя обе процедуры должны легко адаптироваться к АДО, в чем затруднение?
Галочка "подтверждения прочтения" - вселенское зло.
GAZ

GAZ (статус: Посетитель), 2 апреля 2009, 18:51 [#2]:

Первый раз с базами сталкиваюсь.
1.Каков должен быть набор компонентов.Я так думаю.
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;или что то лишнее
2.Достаточно ли будет
Table1 заменить на ADOTable1.Или ещё надо будет что то делать.
Допустим для обращения к таблице "spiszad" нужен наверное SQL запрос или нет? Если нужен тогда что писать.
Вадим К

Вадим К (статус: Академик), 3 апреля 2009, 00:23 [#3]:

Обычно хватает замены Table на ADOTable, Query на ADOQuery и поставить ADOConnectuin, который поможет создать подключение к базе. (вообще то можно и без него, но настраивать подключение для каждого компонента ADOTable и ADOQuery)
Галочка "подтверждения прочтения" - вселенское зло.
GAZ

GAZ (статус: Посетитель), 3 апреля 2009, 07:19 [#4]:

...Query на ADOQuery...
Query в старом варианте не было.Поэтому я про запрос и спрашиваю.В старом варианте - 4 файла (они же таблицы)с расширением db(spiszad.db,spispos.db,spisrep.db,spisor.db).В новом - 1 файл baza.mdb с таблицами имеющиими теже названия.Вот я и хочу допустим на примере заполнения данных из таблицы spiszad понять весь механизм.

Достаточно ли открыть базу следующим куском кода

with MainForm.ADOTable1 do
begin
if Active then Close; //открыть базу данных заданий
TableName:='spiszad';
Open;
First;

а в заполнении параметров не надоли чего менять?Т.е так и оставить
if NZad<>0 then MoveBy(NZad); //перейти на запись с необходимым номером задания
//отображение параметров задания
Label4.Caption:=FieldByName('NPosVideo').AsString;
Label6.Caption:=FieldByName('NPosOrientir').AsString;
Label8.Caption:=FieldByName('NPosReper').AsString;
Label23.Caption:=FieldByName('NFile').AsString;
Label25.Caption:=FieldByName('NFileOrientir').AsString;
Label24.Caption:=FieldByName('NFileReper').AsString;
Label12.Caption:=FieldByName('EndFileMC').AsString;
Label22.Caption:=FieldByName('EndFileXLS').AsString;
....и т.д
Вадим К

Вадим К (статус: Академик), 3 апреля 2009, 10:08 [#5]:

Если не было, значит и менять не чего.
Различайте логические таблицы и физическое их отображение. Акссес сохраняет все таблицы в одном файле, Парадокс (который использовал BDE) - в кучке файлов в папке. Но это должно волновать Вас в самую последнюю очередь.
В Вашем примере экономят на Table, я б поставил по одному ADOTable на каждую таблицу. и строка TableName:='spiszad'; сразу уже не нужна.
А всё остальное как минимум должно начать работать. А вот насколько эффективно - это другой вопрос. Но для начала важно заставить работать.
Галочка "подтверждения прочтения" - вселенское зло.
GAZ

GAZ (статус: Посетитель), 3 апреля 2009, 11:24 [#6]:

Вадим К
В старом проекте Table брошен только в главный модуль,а обрашение к нему идёт в подключаемых модулях.
with MainForm.Table1 do
begin

end;
...В Вашем примере экономят на Table, я б поставил по одному ADOTable на каждую таблицу...
Значит я могу в каждом подключаемом модуле бросать свой ADOTable так или ещё что нужно.
Вадим К

Вадим К (статус: Академик), 3 апреля 2009, 11:31 [#7]:

Да, можно. Хотя правильнее - добавить DataModule (это такая специальная форма, находить в file-new). Это контейнер для невизуальных компонентов. Поставить на него все нужные ADOTable и ADOConnection и подключать до всех нужных юнитов.
А писать в каждом юните with MainForm.Table1 do - некультурно.
Галочка "подтверждения прочтения" - вселенское зло.
GAZ

GAZ (статус: Посетитель), 3 апреля 2009, 13:01 [#8]:

Вадим
,а пошагово и по подробней можно про создание DataModule не очень понятно, что такое file-new.
Вадим К

Вадим К (статус: Академик), 3 апреля 2009, 13:20 [#9]:

Пункт меню File. там подпункт New. А там уже ищем DataModule. В разные версиях обычно чуточку по разному раскладывают их.
Галочка "подтверждения прочтения" - вселенское зло.
GAZ

GAZ (статус: Посетитель), 3 апреля 2009, 14:12 [#10]:

тогда последний вопрос,я создал и набрасал туда все невизуальные компоненты,подключил к нужным мне модулям,а как быть с обрашением
with DataModule.AdoTable1 do или как?
Вадим К

Вадим К (статус: Академик), 3 апреля 2009, 14:29 [#11]:

Можно так, никто не мешает.
в конструкции
with MainForm.Table1 do
плохо то, что обращение идёт к главной форме через дочерние. Появляется лишняя циклическая связанность.
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 7 апреля 2020, 01:23
Выполнено за 0.01 сек.
Рейтинг@Mail.ru