![]() |
| ||
|
|
Новости |
Поиск |
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
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 в помощь