![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
доступ к результатам запроса [D7, MSSQL]
777 © (2005-07-26 10:34:00)Проблема следующая. Надо результат запроса к одной из БД записать (а потом дополнить) данными из другой БД. Для этого во второй БД создается таблица. Потом результат запроса к 1-ой базе (ADOQuery1) пытаюсь затолкать во вторую:
ADOQuery1.Open;
for Index := 1 to ADOQuery1.RecordCount do
begin
QueryText := QueryText + 'INSERT INTO TempTable (ProviderID, Name, Characteristics, ProviderPrice, Presence) VALUES (''' + ADOQuery1.DataSource.DataSet.FieldByName('Code').Value + ''', ''' + ADOQuery1.DataSource.DataSet.FieldByName('Name').Value + ''', ''' + ADOQuery1.DataSource.DataSet.FieldByName('Characteristics').Value + ''', ' + StringReplace(FloatToStr(ADOQuery1.DataSource.DataSet.FieldByName('Price').Value), ',', '.', []) + ', ''' + ADOQuery1.DataSource.DataSet.FieldByName('Presence').Value + ''') ';
ADOQuery1.Next
end;
ADOQuery2.SQL.Text := QueryText;
ADOQuery2.ExecSQL
Так вот проблем возникает на 3-ей строке, когда пытаюсь QueryText присвоить некоторые значение из ADOQuery1. По отладке видно, что DataSource у него Nil. Что делать?
PS однако сам результат запроса в Query1 прекрасно отображается в гриде, если грид настроить на Query1
77 (2005-07-26 11:56:00) [41]нет гарантии, что они однотипные, поэтому приходится юзать кучу инсертов.
Fay (2005-07-26 11:52:00) [42]2 msguns © (26.07.05 11:47) [24]
Потрясаюшая креативность!!! 8)
Ega23 (2005-07-26 11:52:00) [43]Мне так кажется, что и Delphi-то тут не нужен...
Всё можно средствами MS SQL решить...
Fay (2005-07-26 11:52:00) [44]2 777 (26.07.05 11:45) [21]
Стоит послушать msguns
2 msguns © (26.07.05 11:47) [24]
>> А вообще Delphi->Help->Deplhi Tools->Local SQL->DML-Statements->INSERT
На самом деле автору нужно в Books Online.
msguns (2005-07-26 11:50:00) [45]Для работы со скалой из дельфей (ADO+Jet) почитай еще jetsql40.chm
msguns (2005-07-26 11:47:00) [46]>777 (26.07.05 11:40) [17]
>insert into TempTable (...) values ((select ..., ..., ... from <вот здесь данные у меня в query1, а не в таблицеб которая в базе>))
values тут не нужен
INSERT INTO T1 (P1,P2,P3,..PN)
SELECT P1,P2,P3,...PN FROM T2
WHERE ...
Главное, чтобы все эти P1,P2..PN были однотипными.
А вообще Delphi->Help->Deplhi Tools->Local SQL->DML-Statements->INSERT
777 (2005-07-26 11:45:00) [47]2 Fay
Да, но мне же надо сначала посмотреть, как она заполняется, вот я и сделал пока не временную, а простую.
а по поводу книжки... Есть просто вещи, которые только с опытом приходят. по крайней мере мне так кажется
Fay (2005-07-26 11:44:00) [48]2 777 (26.07.05 11:40) [17]
Ещё. Никакихfor Index := 1 to ADOQuery1.RecordCount do! В крайнем случае
ADOQuery1.First;
while not ADOQuery1.Eof do
begin
...
ADOQuery1.Next;
end;
Fay (2005-07-26 11:42:00) [49]2 777 (26.07.05 11:40) [17]
Читай книжку внимательнее. У тебя очень подозрительное (для MSSQL) имя временной таблицы.
Fay (2005-07-26 11:41:00) [50]2 ANB © (26.07.05 11:31) [15]
>> 2. Полный изгал - пихать в SQL.Text кучу инсертов.
INSERT-ов нужно писать ровно столько, сколько требуется.
>> 4. Купи книжку. И прочитай ее.
Согласен, клиент созрел 8)
777 (2005-07-26 11:40:00) [51]2 ANB
1. инсерт с параметрами писать не умею: маленький еще, студент;
2. согласен, просто другого способа не знаю;
3. уже все давно понял;
4. книжку я и так читаю, но не всё сразу!
а если результат query1 еще пока не есть таблица в базе (просто набор данных в моей программе), то как я могу делать такой запрос:
insert into TempTable (...) values ((select ..., ..., ... from <вот здесь данные у меня в query1, а не в таблицеб которая в базе>))
msguns (2005-07-26 11:38:00) [52]>Ega23 © (26.07.05 11:24) [12]
>Да я просто как раз сейчас эту фигню мучаю, с TDataLink...
Достало уже...
Кто о чем, а матрос о сиське ;))
Сори за офтоп
ANB (2005-07-26 11:31:00) [53]Автору :
Поубивал бы за такой код.
1. Напиши инсерт с параметрами.
2. Полный изгал - пихать в SQL.Text кучу инсертов.
3. Вместо ADOQuery1.DataSource.DataSet.FieldByName
надо ADOQuery1.FieldByName. А DataSource у нее и должен быть nil (хорошо хоть сразу на ошибку нарвался).
4. Еще лучше для такого варианта - как в msguns © (26.07.05 11:01) [3]
4. Купи книжку. И прочитай ее.
777 (2005-07-26 11:26:00) [54]2 msguns
Да, все нормально! Всем огромное спасибо! За просвещение особенно!!!
msguns (2005-07-26 11:25:00) [55]>Lexer © (26.07.05 11:23) [11]
>777 (26.07.05 10:34) [0]
>PS однако сам результат запроса в Query1 прекрасно отображается в гриде, если грид настроить на Query1
Блин, имелось в виду, что к сабжевой проблеме грид ни ухом, ни рылом.
Лишь бы прикопаться ?
;)))
Ega23 (2005-07-26 11:24:00) [56]2 msguns © (26.07.05 11:20) [10]
Ежа, не умничай ;))
Да я просто как раз сейчас эту фигню мучаю, с TDataLink...
Достало уже...
Lexer (2005-07-26 11:23:00) [57]>msguns © (26.07.05 11:20) [10]
>Кстати, из сабжа вообще не видно, отображается ли квери1 или нет
>777 (26.07.05 10:34) [0]
>PS однако сам результат запроса в Query1 прекрасно отображается в гриде, если грид настроить на Query1
msguns (2005-07-26 11:20:00) [58]>Ega23 © (26.07.05 11:17) [8]
Только вот не надо в церковь с б..ми, а в бордель с попами, ладушки ? Грид - это грид, а датасет - это датасет. И датасету глубоко серобуромалиново, кто там юзает его рекорды для визуализации или чего-там еще. Кстати, из сабжа вообще не видно, отображается ли квери1 или нет.
Ежа, не умничай ;))
Ega23 (2005-07-26 11:18:00) [59]Ганз, пардон!
Я невнимательно посмотрел. Ты о TDataSet.DataSource, а я о TdataSource.DataSet.
Прошу прощения.
Ega23 (2005-07-26 11:17:00) [60]Поясню. Откуда, по-твоему, компонент TDBGrid знает про данные? Ведь у него свойство TDataSource, а не TDataSet?
А знает он о данных вот откуда: есть у него "внутре" класс TDataLink, точнее TGridDataLink. У которого есть свойство TDataSource, у которого, в свою очередь, есть свойство TDataSet. И данные для отображения в гриде беруться как раз из этой связки.