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


753   (2005-07-26 13:18:00) [21]

да вот, а вы мне еще комплиментов отвешали кучу целую. ну это не к теме уже. короче, делаю сейчас всё, как начал: [0]


Ega23   (2005-07-26 13:15:00) [22]

2 777   (26.07.05 13:14) [45]

Это я понял. просто ужасно это всё...


777   (2005-07-26 13:14:00) [23]

в запросе извлекаются данные из листов Excel, которые связанными таблицами вставляются в Access (это для Ega23, ANB)


Ega23   (2005-07-26 13:06:00) [24]

2 777   (26.07.05 12:43) [40]

Какой ужас....


ANB   (2005-07-26 12:59:00) [25]


> 753   (26.07.05 12:27) [35]

А в запросе что ?


Fay   (2005-07-26 12:53:00) [26]

2 Fay ©   (26.07.05 12:45) [41]
Тогда запрос с параметрами. Адназначна!


Fay   (2005-07-26 12:45:00) [27]

2 msguns ©   (26.07.05 12:40) [39]
>> Так не корректно
Лишние поля как раз не волнуют (в отличие от сортировок и параметров).
Я привёл частное решение, и оно вполне корректное в частном случае.
Автор уже читает какой-то букварь, так что не вижу необходимости в расширенной образовательной пограмме с рассмотрением разных ситуаций.


777   (2005-07-26 12:43:00) [28]

так не прокатит:
1-ая база MS Access
2-ая база MS SQL Server
Query1:
SELECT
 (iif(InStr([F2], "(") > 0, Mid([F2], 1, InStr([F2], "(") - 1), iif(InStr([F2], "/") > 0, Mid([F2], 1, InStr([F2], "/") - 1), iif(InStr([F2], ",") > 0, Mid([F2], 1, InStr([F2], ",") - 1), [F2])))) AS Name,
 (iif(InStr([F2], "(") > 0, Mid([F2], InStr([F2], "(")), iif(InStr([F2], "/") > 0, Mid([F2], InStr([F2], "/")), iif(InStr([F2], ",") > 0, Mid([F2], InStr([F2], ",") + 1), Null)))) AS Characteristics,
 F14 AS Price,
 F6 AS Presence,
 '1-' + F1 AS Code
FROM Лист1
WHERE ((Лист1.F9) <> '') AND ((Лист1.F2) <> 'Наименование товаров')
UNION ALL
SELECT
 (iif(InStr([F5], "(") > 0, Mid([F5], 1, InStr([F5], "(") - 1), iif(InStr([F5], "/") > 0, Mid([F5], 1, InStr([F5], "/") - 1), iif(InStr([F5], "<") > 0, Mid([F5], 1, InStr([F5], "<") - 1), iif(InStr([F5], "[") > 0, Mid([F5], 1, InStr([F5], "[") - 1), iif(InStr([F5], ",") > 0, Mid([F5], 1, InStr([F5], ",") - 1), [F5])))))) AS Name,
 (iif(InStr([F5], "(") > 0, [F6] + Mid([F5], InStr([F5], "(")), iif(InStr([F5], "/") > 0, [F6] + Mid([F5], InStr([F5], "/")), iif(InStr([F5], "<") > 0, [F6] + Mid([F5], InStr([F5], "<"), InStr([F5], ">")), iif(InStr([F5], "[") > 0, [F6] + Mid([F5], InStr([F5], "[")), iif(InStr([F5], ",") > 0, Mid([F5], InStr([F5], ",") + 1), [F6])))))) AS Characteristics,
 F9 AS Price,
 F10 AS Presence,
 '2-' + Trim(Str(F14)) AS Code
FROM In_a
WHERE (((In_a.F14) <> 0) AND ((In_a.F1) <> 'Категория'))
многие функции, которые стандартные для аксес, не знакомы SQL Server, поэтому этот запрос будет для него... синтаксически неверен


msguns   (2005-07-26 12:40:00) [29]

>Fay ©   (26.07.05 12:36) [38]

Так не корректно (в квери могут быть параметры или "лишние" поля)


Fay   (2005-07-26 12:36:00) [30]

2 777   (26.07.05 12:23) [33]

ADOQuery2.SQL.Text :=
'insert into TempTable (ProviderID,  [Name], Chatacteristics, ProviderPrice, Presence)'#13#10+
'select Code, [Name], Characteristics, Price, Presence'#13#10+
'from ('+ADOQuery1.SQL.Text+') Q';


777   (2005-07-26 12:32:00) [31]

вы бы открыли параллельную ветку и разговаривали бы там про оракл и одак. конечно, спасибо вам огромное (и за насмешки ваши тоже), но...


Fay   (2005-07-26 12:30:00) [32]

2 ANB ©   (26.07.05 12:23) [32]

>> Это особенность MS SQL.
>> 2 Oracle + Odac - не работает.

Во первых.
Что-то я не совсем понимаю. IMHO, (ODAC dbGO) & (MSSQL Oracle).

Во-вторых. (Odac+Oracle) и так не жуют?
begin
 insert into Table1(... ;
 insert into Table1(... ;
 insert into Table1(... ;
 insert into Table1(... ;
 insert into Table1(... ;
 insert into Table1(... ;
 commit;
end;


753   (2005-07-26 12:27:00) [33]

результат запроса


ANB   (2005-07-26 12:25:00) [34]


> 777   (26.07.05 12:23) [33]

Читать учебники еще раз, до полного просветления.
Ну откуда MS SQL знает о существовании ADoQuery, твоей программы и вообще Delphi ?
У тебя в ADOQuery1 что лежит ?


777   (2005-07-26 12:23:00) [35]

Ну вот!
Запрос
INSERT INTO TempTable (ProviderID,  [Name], Chatacteristics, ProviderPrice, Presence)
(SELECT Code, [Name], Characteristics, Price, Presence
FROM ADOQuery1)
ошибка: неопознал ADOQuery1. в запросах же можно только объекты БД указывать, а не мешать их с объектами программы.


ANB   (2005-07-26 12:23:00) [36]


> Fay ©   (26.07.05 12:11) [31]

Oracle + Odac - не работает.


Fay   (2005-07-26 12:11:00) [37]

2 ANB ©   (26.07.05 12:04) [30]
>> И, имхо, далеко не все сервера едят пакетные инсерты. Это особенность MS SQL.

Враки. Злобные враки.

>> Зачем извращаться то.
Это не извращение. Запрос должен включать с себя то, что он должен делать. Не вижу повода для воздержания.


ANB   (2005-07-26 12:04:00) [38]


> Fay ©   (26.07.05 11:41) [18]
- не нужно, а можно. Но не нужно. Куда эту строку потом пихать ? И, имхо, далеко не все сервера едят пакетные инсерты. Это особенность MS SQL. Зачем извращаться то.


> 77   (26.07.05 11:56) [27]
> нет гарантии, что они однотипные, поэтому приходится юзать
> кучу инсертов.
??????? Если у тебя Table1.P1 и Table2.P1 разнотипные, то тут и куча инсертов не поможет.


Fay   (2005-07-26 12:01:00) [39]

2 77   (26.07.05 11:56) [27]
Это не причина. Приведение можно сделать и на T-SQL.

З.Ы.
77 после 777 - это повышение/понижение по званию? 8)


msguns   (2005-07-26 11:59:00) [40]

>77   (26.07.05 11:56) [27]

CAST/CONVERT в помощь


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

Наверх

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