![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Доброго времени суток. Я новичек в БД но возникла ситуация что надо сделать програмку с открытием 2-х dbf файлов выборкой оттуда нужной информации и записью ее в др. dbf. Нашел код в инете, для открытия, теперь нужно сделать выборку из 2-х или более файлов и записать в новый dbf подскажите как это можно сделать или где посмотреть.
Спасибо. Последний раз редактировалось Andrej-zhe, 28.08.2012 в 16:56. |
|
#2
|
||||
|
||||
|
используй TQuery
|
|
#3
|
|||
|
|||
|
Использую, но можно по подробнее может ссылочка есть гед можно посмотреть как это все организуется
|
|
#4
|
||||
|
||||
|
Можно же организовать несколько подключений (TADOConnection), каждое к отдельной dbf'ке.
Чтоб заинсертить данные в другой файл, просто откроешь Query для первой ДБФ-ки, вытащишь данные и передашь их в ADOCommand для второй ДБФ-ки. |
|
#5
|
||||
|
||||
|
навскидку
Код:
Query.Close; Query.SQL.Text:='SELECT f.*, s.* FROM t1.dbf f, t2.dbf s WHERE t.id = s.id'; Query.Open; while not Query.Eof do begin <пишем в 3-ю табличку> Query.Next; end; |
|
#6
|
||||
|
||||
|
Один ДБФ - одна таблица же вроде?
|
|
#7
|
||||
|
||||
|
таблица то одна, а вот запросом можно обратиться и к нескольким файлам (таблицам) ... если я ниче не путаю
![]() |
|
#8
|
|||
|
|||
|
Прошу прощение за нубство.
Попробую объяснить что мне требуется. К сожалению конкретизировать не могу что за табл и что там надо, поэтому буду описывать возможно немного запутанно. Существует табл.№1 №2 №3 №4. Из каждой этой таблици путем сравнения например определенного толбца в №1 №2 и №3 табл нужно выдетруть информацию и записать ее в табл. №5. Затем по аналогии сравнить табл №3 и №4 и из талб №4 добавить в №5 недостающую информацию. Вот все что у меня есть: Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then begin
ADOConnection1.Close;
ADOConnection1.ConnectionString := Format('Provider=VFPOLEDB.1;Data Source=%s;'
+ 'Mode=ReadWrite;Extended Properties="";User ID="";Password="";'
+'Mask Password = False; '
+ 'Cache Authentication=False;Encrypt Password=False;'
+ 'Collating Sequence = RUSSIAN; DSN = ""',[ExtractFilePath(OpenDialog1.FileName)]);
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(Format('select * from %s',
[ExtractFileName(OpenDialog1.FileName)]));
ADOQuery1.Active := True
end;end; Последний раз редактировалось Bargest, 19.09.2012 в 23:44. |
|
#9
|
||||
|
||||
|
а ты укажи реальные имена таблиц, какие поля с какими полями нужно сравнивать и какие поля с какой таблицы нужно выбирать
|
|
#10
|
||||
|
||||
|
последовательно в TQuery выполнить запросы:
Код:
insert into t5 (f1, f2, ..., fn) select f1, f2, ..., fn from t1 where f1=* and f2=* insert into t5 (f1, f2, ..., fn) select f1, f2, ..., fn from t2 where f1=* and f2=* insert into t5 (f1, f2, ..., fn) select f1, f2, ..., fn from t3 where f1=* and f2=* Последний раз редактировалось NumLock, 29.08.2012 в 13:22. |
|
#11
|
|||
|
|||
|
Тогда так.
имена: duk.dbf, mklh.dbf, op.dbf, op_ozo.dbf а пятый назовем sbor.dbf 1)В duk.dbf, op.dbf и op_ozo.dbf нужно сравнить поля type, subtype, key, если эти поля совпадают тогда из duk.dbf нужно записать в sbor.dbf kod и name? а из op.dbf в sbor.dbf поле N. да вот еще если возможно то поля type, subtype, key можно сравнивать объединив значения в одно, т.к. там строковые символы но отобразаются числами. Например, type = 1, subtype = 2, key = 3, объединение будет выглядеть так 123. 2)последнюю таблицу после пункта 1 мы уже можем сравнивать sbor.dbf c mklh.dbf по полям n и nk, если они совпадают то из mklh.dbf нужно записать в sbor.dbf поля FIO, DP, DR, DV. вот как то так. |
|
#12
|
|||
|
|||
|
Я пошел от обратного вывел из mklh.dbf все необходимые поля и теперь нужно узнать добавить 1 поле которое находится в duk.dbf, но к нему можно попасть только так mklh.dbf -> op.dbf -> op_ozo.dbf -> duk.dbf
C mklh.dbf в op.dbf по полю nk и n соответственно. С op.dbf в op_ozo.dbf и с op_ozo.dbf в duk.dbf через поля type, subtype и key Как вот делаются условия? мне получается надо сделать условие такого типа (если в поле nk файла mklh.dbf равно полю n в op.dbf, а поле type+subtype+key в файле op.dbf равно полю type+subtype+key в файле op_ozo.dbf и поля type+subtype+key в файле op_ozo.dbf равно полю type+subtype+key в файле duk.dbf, то из файла duk.dbf добавить в mklh.dbf поле name и поле kod) вот такая вот смерть кащея( Последний раз редактировалось Andrej-zhe, 30.08.2012 в 12:05. |
|
#13
|
||||
|
||||
|
Цитата:
|
|
#14
|
||||
|
||||
|
Цитата:
Код:
Query.Close;
Query.SQL.Text:='SELECT d.kod, d.name, o.N FROM duk.dbf d, op.dbf o, op_ozo.dbf z WHERE d.type||d.subtype||d.key = o.type||o.subtype||o.key
AND d.type||d.subtype||d.key = z.type||z.subtype||z.key';
Query.Open;
if Query.RecordCount>0
then
begin
tblSbor.Open;
while not Query.Eof do
begin
tblSbor.Insert;
tblSbor.FieldByName('kod').Value:=Query.FieldByName('kod').Value;
tblSbor.FieldByName('name').Value:=Query.FieldByName('name').Value;
tblSbor.FieldByName('N').Value:=Query.FieldByName('N').Value;
tblSbor.Post;
Query.Next;
end;
end
else ShowMessage('Ни одной записи не найдено');Цитата:
см. решение п1. (аналогия) ![]() |
| Этот пользователь сказал Спасибо Yurk@ за это полезное сообщение: | ||
Andrej-zhe (30.08.2012)
| ||
|
#15
|
|||
|
|||
|
Юрий спасибо щас буду пытаться победить. О результате отпишусь.
|
![]() |
|
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|
|