| 
| 
 | Вопрос # 2 590/ вопрос открыт / | 
 |  Приветствую, уважаемые эксперты!Я сейчас разбираю приложение в котором база данных paradox и работа
 с ней ведётся с помощью Table1: TTable; Я импортировал все таблицы БД в
 Access и хочу работать с компонентами ADO. В приложении я даю 2 процедуры работы старой БД.Не могли бы вы поправить код, сделать его по компоненты ADO.
 Приложение:Переключить в обычный режим  procedure TZadanForm.FormShow(Sender: TObject);begin    with MainForm.Table1 do  begin  if Active then Close;   Open;  First;    begin   ZadComboBox.Items.Add(FieldByName('TxtZ').AsString);   Next;   end;  end;   NRepPos.Clear; NOrientPos.Clear; NVidFile.Clear; NRepFile.Clear; NOrientFile.Clear;  NVyd:=TStringList.Create; NPhas:=TStringList.Create; NDKS:=TStringList.Create; NSvD:=TStringList.Create; NTGR:=TStringList.Create; NVisD:=TStringList.Create; NVyd.Sorted :=false; NPhas.Sorted :=false; NDKS.Sorted :=false; NSvD.Sorted :=false; NTGR.Sorted :=false; NVisD.Sorted :=false;   end;  procedure TZadanForm.LoadParamZadan(NZad:integer);begin with MainForm.Table1 do  begin   TableName:='spiszad';  Open;     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;  if FieldByName('PrSl').AsInteger=0   kod:=FieldByName('NumZ').AsInteger;  objb:=FieldByName('NameO1').AsString;  objr:=FieldByName('NameO2').AsString;  objo:=FieldByName('NameO3').AsString;   CurrZad.NumZ:=FieldByName('NumZ').AsInteger;  CurrZad.TxtZ:=FieldByName('TxtZ').AsString;  CurrZad.NPosVideo:=FieldByName('NPosVideo').AsInteger;  CurrZad.NPosReper:=FieldByName('NPosReper').AsInteger;  CurrZad.NPosOrientir:=FieldByName('NPosOrientir').AsInteger;  CurrZad.NFileReper:=FieldByName('NFileReper').AsInteger;  CurrZad.NFileOrientir:=FieldByName('NFileOrientir').AsInteger;  if FieldByName('PrSl').AsInteger=0 then CurrZad.PrSl:=false else CurrZad.PrSl:=true;//  CurrZad.PaspFile:=FieldByName('PaspXLS').AsString;  CurrZad.FileMC:=FieldByName('EndFileMC').AsString;  CurrZad.FileXls:=FieldByName('EndFileXls').AsString;  CurrZad.PathMC:=FieldByName('PathMC').AsString;  CurrZad.PathXls:=FieldByName('PathXls').AsString;  CurrZad.NF:=FieldByName('NFile').AsInteger;  Close;  end; end; 
|  |   Вопрос задал: GAZ (статус: Посетитель)Вопрос отправлен: 2 апреля 2009, 18:19
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 11; последнее сообщение — 3 апреля 2009, 14:29; участников в обсуждении: 2. 
|   | Вадим К (статус: Академик), 2 апреля 2009, 18:23 [#1]:Вторая процедура я так понимаю - это найти нужную запись в базе и перенести поля в ГУИ? Хотя обе процедуры должны легко адаптироваться к АДО, в чем затруднение?
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | 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 (статус: Посетитель), 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 (статус: Посетитель), 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 (статус: Посетитель), 3 апреля 2009, 13:01 [#8]:Вадим ,а пошагово и по подробней можно про создание DataModule не очень понятно, что такое file-new.
 |  
|   | Вадим К (статус: Академик), 3 апреля 2009, 13:20 [#9]:Пункт меню File. там подпункт New. А там уже ищем DataModule. В разные версиях обычно чуточку по разному раскладывают их. Галочка "подтверждения прочтения" - вселенское зло. |  
|   | GAZ (статус: Посетитель), 3 апреля 2009, 14:12 [#10]:тогда последний вопрос,я создал и набрасал туда все невизуальные компоненты,подключил к нужным мне модулям,а как быть с обрашением with DataModule.AdoTable1 do или как?
 |  
|   | Вадим К (статус: Академик), 3 апреля 2009, 14:29 [#11]:Можно так, никто не мешает. в конструкции
 with MainForm.Table1 do
 плохо то, что обращение идёт к главной форме через дочерние. Появляется лишняя циклическая связанность.
 Галочка "подтверждения прочтения" - вселенское зло. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |