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

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

доступ к результатам запроса [D7, MSSQL]


Страницы:   1 2 3 4

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. И данные для отображения в гриде беруться как раз из этой связки.


Страницы:   1 2 3 4

Наверх

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