Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.08.2012, 16:52
Andrej-zhe Andrej-zhe вне форума
Прохожий
 
Регистрация: 28.08.2012
Адрес: Курск
Сообщения: 49
Репутация: 10
По умолчанию dbf в delphi

Доброго времени суток. Я новичек в БД но возникла ситуация что надо сделать програмку с открытием 2-х dbf файлов выборкой оттуда нужной информации и записью ее в др. dbf. Нашел код в инете, для открытия, теперь нужно сделать выборку из 2-х или более файлов и записать в новый dbf подскажите как это можно сделать или где посмотреть.
Спасибо.

Последний раз редактировалось Andrej-zhe, 28.08.2012 в 16:56.
Ответить с цитированием
  #2  
Старый 28.08.2012, 17:05
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59585
По умолчанию

используй TQuery
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 28.08.2012, 17:30
Andrej-zhe Andrej-zhe вне форума
Прохожий
 
Регистрация: 28.08.2012
Адрес: Курск
Сообщения: 49
Репутация: 10
По умолчанию

Использую, но можно по подробнее может ссылочка есть гед можно посмотреть как это все организуется
Ответить с цитированием
  #4  
Старый 28.08.2012, 17:32
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,503
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Можно же организовать несколько подключений (TADOConnection), каждое к отдельной dbf'ке.
Чтоб заинсертить данные в другой файл, просто откроешь Query для первой ДБФ-ки, вытащишь данные и передашь их в ADOCommand для второй ДБФ-ки.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #5  
Старый 28.08.2012, 18:51
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

навскидку
Код:
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;
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #6  
Старый 28.08.2012, 20:01
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,503
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Один ДБФ - одна таблица же вроде?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #7  
Старый 29.08.2012, 00:32
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

таблица то одна, а вот запросом можно обратиться и к нескольким файлам (таблицам) ... если я ниче не путаю
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #8  
Старый 29.08.2012, 09:55
Andrej-zhe Andrej-zhe вне форума
Прохожий
 
Регистрация: 28.08.2012
Адрес: Курск
Сообщения: 49
Репутация: 10
По умолчанию

Прошу прощение за нубство.
Попробую объяснить что мне требуется.
К сожалению конкретизировать не могу что за табл и что там надо, поэтому буду описывать возможно немного запутанно.
Существует табл.№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  
Старый 29.08.2012, 12:55
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

а ты укажи реальные имена таблиц, какие поля с какими полями нужно сравнивать и какие поля с какой таблицы нужно выбирать
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #10  
Старый 29.08.2012, 13:20
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59585
По умолчанию

последовательно в 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=*
синтаксис подробнее посмотреть в "c:\Program Files\Common Files\Borland Shared\BDE\LOCALSQL.HLP"
__________________
Пишу программы за еду.
__________________

Последний раз редактировалось NumLock, 29.08.2012 в 13:22.
Ответить с цитированием
  #11  
Старый 29.08.2012, 13:23
Andrej-zhe Andrej-zhe вне форума
Прохожий
 
Регистрация: 28.08.2012
Адрес: Курск
Сообщения: 49
Репутация: 10
По умолчанию

Тогда так.
имена: 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  
Старый 30.08.2012, 11:51
Andrej-zhe Andrej-zhe вне форума
Прохожий
 
Регистрация: 28.08.2012
Адрес: Курск
Сообщения: 49
Репутация: 10
По умолчанию

Я пошел от обратного вывел из 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  
Старый 30.08.2012, 11:56
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Andrej-zhe
Я пошел от обратного вывел из 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, sybtype и key
Если я правильно понял вопрос, то тебе нужно в SQL-запросе использовать JOIN.
Ответить с цитированием
  #14  
Старый 30.08.2012, 13:03
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Andrej-zhe
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.
Код:
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('Ни одной записи не найдено');
Цитата:
2)последнюю таблицу после пункта 1 мы уже можем сравнивать sbor.dbf c mklh.dbf по полям n и nk, если они совпадают то из mklh.dbf нужно записать в sbor.dbf поля FIO, DP, DR, DV.

см. решение п1. (аналогия)
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
Этот пользователь сказал Спасибо Yurk@ за это полезное сообщение:
Andrej-zhe (30.08.2012)
  #15  
Старый 30.08.2012, 14:20
Andrej-zhe Andrej-zhe вне форума
Прохожий
 
Регистрация: 28.08.2012
Адрес: Курск
Сообщения: 49
Репутация: 10
По умолчанию

Юрий спасибо щас буду пытаться победить. О результате отпишусь.
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:39.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2019

ВКонтакте   Facebook   Twitter