Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запрос на нескольких DBF [D7]


Страницы:   1 2

Inna21 ©   (2010-01-14 23:24:00) 

Для отчета в конце месяца предоставляют несколько файлов(кольчество может быть разным) вида: file_код_одтела_stk.dbf
их программа по другому не может и переделывать ее никто не будет.
Структура этих файлов одинакова только отличается в названии код отдела.
Вопрос: как лучше слить эти файла в один и добавить в него доп. поле "код отдела" из названия. Или может можно делать выборку типа ?:
select * from file_??????????_stk.dbf сразу на неськольких файлах
Помогите пожалуйста. Заранее спасибо.


Anatoly Podgoretsky   (2010-01-16 18:50:00) [1]

> Inna21  (16.01.2010 18:46:21)  [21]

Вообще то необязательно, но желательно и более удобно


Inna21   (2010-01-16 18:46:00) [2]


> DModule.Total2p.SQL.Add('INSERT INTO "TOTAL2P.DBF" (RS,
> LGPRC, SUMM, TARIF, FLAG, Source)');   DModule.Total2p.SQL.
> Add('SELECT RS, LGPRC, SUMM, TARIF, FLAG, :FL FROM "'+Trim(FileList[i])+'"');
>

Да, только параметр нужно ставит в том порядке, в котором Sourse идет в приемнике


Anatoly Podgoretsky   (2010-01-16 18:43:00) [3]

> Inna21  (16.01.2010 18:34:19)  [19]

Следует понимать, что работает?


Inna21   (2010-01-16 18:34:00) [4]


> Anatoly Podgoretsky ©   (16.01.10 18:04) [18]

Спасибо. Та вы тут наверно самый главный Мастер


Anatoly Podgoretsky   (2010-01-16 18:04:00) [5]

DModule.Total2p.SQL.Add('INSERT INTO "TOTAL2P.DBF" (RS, LGPRC, SUMM, TARIF, FLAG, Source)');
  DModule.Total2p.SQL.Add('SELECT RS, LGPRC, SUMM, TARIF, FLAG, :FLFROM "'+Trim(FileList[i])+'"');

Вот так, в списке полей указать поле куда будет записываться, а списке данных сам параметр, и присвоить ему значение, как это у тебя сделано. Все очень просто, но надо проверить синтаксис для LocalSQL, это уже работа для тебя


Inna21   (2010-01-16 18:01:00) [6]


> Anatoly Podgoretsky ©   (16.01.10 17:41) [15]
исключением параметра FL его не наблюдается в запросе.

INSERT INTO "TOTAL2P.DBF" (RS, LGPRC, SUMM, TARIF, FLAG, :FL)');
так просто не работает


Inna21   (2010-01-16 17:57:00) [7]


> Anatoly Podgoretsky ©   (16.01.10 17:41) [15]
> > Inna21  (16.01.2010 17:22:14)  [14]Каким дополнительным
> полем и где оно.А совпадать конечно обязательно, это же
> базовое требование, есть вариант кончено, разные запросы
> для разных источников, только вопрос как источники то отличать?
> Указаный вариант запроса цикла не требует, вся страница
> разом переливается в приемник. Цикл нужен только по таблицам,
>  а не по записям. То есть у тебя законченый текст, не требующий
> изменений, за исключением параметра FL его не наблюдается
> в запросе.

for i := 0 to FileList.Count - 1 do это и есть цикл по таблицам, а не по записям

DModule.Total2p.SQL.Add('INSERT INTO "TOTAL2P.DBF" (RS, LGPRC, SUMM, TARIF, FLAG)');
   DModule.Total2p.SQL.Add('SELECT RS, LGPRC, SUMM, TARIF, FLAG FROM "'+Trim(FileList[i])+'"');
сдесь Trim(FileList[i]) - это DBF файл. Только вопрос в том как при таком подходе(не по записям а по файлам) вставить в
'INSERT INTO "TOTAL2P.DBF" (RS, LGPRC, SUMM, TARIF, FLAG, "ИМЯ ФАЙЛА ИСТОЧНИКА")');
По записям это у меня получается


Anatoly Podgoretsky   (2010-01-16 17:41:00) [8]

> Inna21  (16.01.2010 17:22:14)  [14]

Каким дополнительным полем и где оно.
А совпадать конечно обязательно, это же базовое требование, есть вариант кончено, разные запросы для разных источников, только вопрос как источники то отличать?
Указаный вариант запроса цикла не требует, вся страница разом переливается в приемник. Цикл нужен только по таблицам, а не по записям. То есть у тебя законченый текст, не требующий изменений, за исключением параметра FL его не наблюдается в запросе.


Inna21   (2010-01-16 17:22:00) [9]


> Anatoly Podgoretsky ©   (15.01.10 00:06) [7]

Но при таких запросах поля должны совпадать, а как быть с дополнительным полем

for i := 0 to FileList.Count - 1 do
  begin
    DModule.Total2p.Close;
    DModule.Total2p.SQL.Clear;
    DModule.Total2p.SQL.Add('INSERT INTO "TOTAL2P.DBF" (RS, LGPRC, SUMM, TARIF, FLAG)');
    DModule.Total2p.SQL.Add('SELECT RS, LGPRC, SUMM, TARIF, FLAG FROM "'+Trim(FileList[i])+'"');
    //DModule.Total2p.ParamByName('fl').AsString := Trim(FileList[i]);
    DModule.Total2p.ExecSQL;
  end;

Циклом каждую запись переливать что ли?


Демо   (2010-01-15 02:16:00) [10]


> Ты наверно и не помнил, из справкиINSERT INTO "Customer.
> db" (CustNo, Company)SELECT CustNo, Company FROM "OldCustomer.
> db"


Тем лучше. Значит процесс объединения автоматизируется на раз.


Германн   (2010-01-15 01:25:00) [11]

Хотя сабж отличается некоей новизной и отчаянной ленью что-то делать самой. :)

> Или может можно делать выборку типа ?:
> select * from file_??????????_stk.dbf сразу на неськольких
> файлах

:)


Германн   (2010-01-15 01:12:00) [12]


> Anatoly Podgoretsky ©   (14.01.10 23:50) [3]

Токмо твой совет не отвечает на сабж.


Германн   (2010-01-15 00:56:00) [13]


> Это приведено как раз из localsql и там нет ограничений
> для dBase.

Подтверждаю.
Но хелп от Борланда вообще и localsql.hlp в частности всегда был ущербным.
В топике справки по localsql "INSERT statement" три примера. В первом упоминается dbf. В двух других db.


Anatoly Podgoretsky   (2010-01-15 00:20:00) [14]

> turbouser  (15.01.2010 00:13:08)  [8]

Это приведено как раз из localsql и там нет ограничений для dBase.


turbouser   (2010-01-15 00:13:00) [15]


> Anatoly Podgoretsky ©

в localsql много ограничений..


Anatoly Podgoretsky   (2010-01-15 00:06:00) [16]

> Демо  (14.01.2010 23:52:04)  [4]

Ты наверно и не помнил, из справки

INSERT INTO "Customer.db" (CustNo, Company)
SELECT CustNo, Company FROM "OldCustomer.db"


turbouser   (2010-01-14 23:54:00) [17]


> Демо ©

+1 :)


turbouser   (2010-01-14 23:53:00) [18]


> Anatoly Podgoretsky ©

тоже хотел предложить :) но засомневался :)


Демо   (2010-01-14 23:52:00) [19]


> INSERT INTO ... SELECT FROM ...


Это на каком двигателе? BDE вроде не позволяет для DBF такие запросы выполнять? Или я забыл уже?


Anatoly Podgoretsky   (2010-01-14 23:50:00) [20]

> Inna21  (14.01.2010 23:41:02)  [2]

INSERT INTO ... SELECT FROM ...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо