|
Вопрос # 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
плохо то, что обращение идёт к главной форме через дочерние. Появляется лишняя циклическая связанность.
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|