Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.03.21;
Скачать: [xml.tar.bz2];

Вниз

Запрос на нескольких DBF   Найти похожие ветки 

 
Inna21   (2010-01-14 23:24) [0]

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


 
Демо ©   (2010-01-14 23:35) [1]

Создавай ещё один файл с дополнительным полем, добавляй код отдела, сливай файлы и уже по этому файлу делай отчёты.
Возможности для автоматизации этого процесса в Delphi есть.


 
Inna21   (2010-01-14 23:41) [2]


> Демо ©   (14.01.10 23:35) [1]

Да вот как раз лишних движений и не хочеться, это можно легко сделать

select * from file_??????????_stk.dbf Ну такой никак?


 
Anatoly Podgoretsky ©   (2010-01-14 23:50) [3]

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

INSERT INTO ... SELECT FROM ...


 
Демо ©   (2010-01-14 23:52) [4]


> INSERT INTO ... SELECT FROM ...


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


 
turbouser ©   (2010-01-14 23:53) [5]


> Anatoly Podgoretsky ©

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


 
turbouser ©   (2010-01-14 23:54) [6]


> Демо ©

+1 :)


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

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

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

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


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


> Anatoly Podgoretsky ©

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


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

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

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


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


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

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


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


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

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


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

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

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

:)


 
Демо ©   (2010-01-15 02:16) [13]


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


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


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


> 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;

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


 
Anatoly Podgoretsky ©   (2010-01-16 17:41) [15]

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

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


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


> 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, "ИМЯ ФАЙЛА ИСТОЧНИКА")");
По записям это у меня получается


 
Inna21   (2010-01-16 18:01) [17]


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

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


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

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])+""");

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


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


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

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


 
Anatoly Podgoretsky ©   (2010-01-16 18:43) [20]

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

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


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


> 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:50) [22]

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

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



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2010.03.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.005 c
15-1262640624
Юрий
2010-01-05 00:30
2010.03.21
С днем рождения ! 5 января 2010 вторник


15-1262278818
qaz
2009-12-31 20:00
2010.03.21
Новогодняя


1-1240570370
MultIfleX
2009-04-24 14:52
2010.03.21
Адрес вызывающего функцию


15-1262122222
Юрий
2009-12-30 00:30
2010.03.21
С днем рождения ! 30 декабря 2009 среда


1-1242222408
Гарик
2009-05-13 17:46
2010.03.21
Справка WinHelp в Дельфи 7





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский