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


msguns   (2005-07-26 15:56:00) [1]

>753   (26.07.05 15:10) [65]
>а это всё так важно, да?! я вообще не завсегдатай зздесь.

А вот я завсегдатай, и большинство учавствующих в этой ветке - тоже. И мы имеем дурную привычку запоминать ники. Чтобы знать, с кем имеем дело в будущем.

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

>>Чем торгует фирма, танкерами ?
>это тоже не имеет отношения к делу. всё уже учтено: все скидки и всё такое

Неужели ? Открою оочень большой секрет: в фармации одна система работы с дилерами и реселлерами, в продуктовке - другая, в стройматериалах - совсем третья и т.д. Но, видимо, программиста это не волнует, т.к. "студент еще"

Одно могу сказать с уверенностью: "сводный" прайс подобный тому, то в "ТЗ" - это галиматья, лишь мешающая менеджерам нормально работать с партнерами и очень скоро твой "шедевр" будут просто игнорировать.
Проверено на практике, и не раз.

Если же хочется сделать нормальную аналитическую программу для реальной помощи руководству, то это дело сложное и перетаскиванием в "базу" намыленных эксель-прайсов не решается.


ANB   (2005-07-26 15:43:00) [2]

Усе понятно, в принципе. Ega23 - не ругайся, я так и просил.
Короче : создаешь таблицу для закачки прайса с фиксированными колонками. Можно заранее, ручками (про временные - сам поищи инфу, не копался), можно через ADOQuery. Если заранее - не забудь из нее все удалить, перед закачкой. Поля заводишь один к одному по порядку, как в запросе источнике.
Дальше делаешь так : (пишу примерно, сам отладишь).
dsSrc и dsInsert : TAADOQuery;
dsInsert.SQL.Text :=
'insert into T_Price (F1, F2, F3) values (:F1, :F2, :F3)';
// Предущую строчку можешь сгенерить на автомате. F1, F2, F3 заменишь на имена своих полей.
dsSrc.Open;
while (not dsSrc.Eof) do begin
for i := 0 to dsSrc.FieldCount - 1 do begin
 dsInsert.Params[i].AsString := dsSrc.Fields[i].AsString;
end;
dsInsert.ExecSQL;
dsSrc.Next;
end;
dsSrc.Close;
Ограничение - количество параметров в insert должно строго соответсвовать количеству полей в запросе. И порядок тоже. Если будут вариации - сам допишешь.


  (2005-07-26 15:10:00) [3]

Удалено модератором


msguns   (2005-07-26 14:59:00) [4]

Кстати, а че за петрушка с никами, какой-то семь-восемь-надцать огурец ? Зарегиться амулет не дает ? Или там на шару пол-конторы сбежалось поржать ?


msguns   (2005-07-26 14:55:00) [5]

>753   (26.07.05 14:14) [55]
>1. Получаем прайсы от поставщиков в формате Excel, все разнородные, нам надо получить сводный унифицированный прайс с колонками цена, наличие, наименование товара, характеристики, код поставщика
2. Нам надо сравнить то, что есть в прайсе с нашим прайсом: проставить внутренний для нащей конторы код изделия, нашу цену.

>777   (26.07.05 14:16) [56]
>Всё делается с целью слежения за ценой: если она в пределах 8-10% (наценка), то всё тип-топ, если нет, то тогда формируется новый приказ о ценах, куда включаются товары, с "плохой" ценой

Чем торгует фирма, танкерами ?
С ширпотребом так не работают. Существует целое море оптовых и не оптовых скидок, варьируемых поставщиком постоянно. Кроме того, поставщик может диктовать выходную цену, объемы реализации, ассортмент. А также может предоставлять отсрочки, кредиты, лизинги и фиг знает чего еще. Помимо этого существует еще разнопроизвоизводители, когда одноименный товар с разными потребительскими качествами делается на  разных заводах-фабриках и т.д.

И все это в "сводный унифицированный прайс" ?


777   (2005-07-26 14:36:00) [6]

да я тоже решил, но работает всё медленно, пожтому вот переделываю


Lexer   (2005-07-26 14:30:00) [7]


753   (26.07.05 14:14) [55]
ТЗ:
1. Получаем прайсы от поставщиков в формате Excel, все разнородные, нам надо получить сводный унифицированный прайс с колонками цена, наличие, наименование товара, характеристики, код поставщика
2. Нам надо сравнить то, что есть в прайсе с нашим прайсом: проставить внутренний для нащей конторы код изделия, нашу цену.


Месяц назад, решил эту проблему, могу скинуть, кому надо на мыло. Реализовал всё макросом, прайсы обрабатывает практически любые, надо только в листе настроек для каждого прописать свои настройки.


777   (2005-07-26 14:27:00) [8]

и тишина...
и мертвые с косами стоят...


  (2005-07-26 14:19:00) [9]

Удалено модератором


777   (2005-07-26 14:18:00) [10]

2 Fay
в ран-тайм query как-то на параметры настраивается? как?


Ega23   (2005-07-26 14:17:00) [11]

И ты ЭТО называешь ТЗ??????????????????


777   (2005-07-26 14:16:00) [12]

Всё делается с целью слежения за ценой: если она в пределах 8-10% (наценка), то всё тип-топ, если нет, то тогда формируется новый приказ о ценах, куда включаются товары, с "плохой" ценой


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

ТЗ:
конечная цель - актуальные цены на сайте, которые берутся из БД на SQL Server
1. Получаем прайсы от поставщиков в формате Excel, все разнородные, нам надо получить сводный унифицированный прайс с колонками цена, наличие, наименование товара, характеристики, код поставщика
2. Нам надо сравнить то, что есть в прайсе с нашим прайсом: проставить внутренний для нащей конторы код изделия, нашу цену.


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

1) F1 рулит.
The following code runs an insert query to add a record for Liechtenstein into the country table.

Query2.SQL.Clear;

Query2.SQL.Add('INSERT INTO COUNTRY (NAME, CAPITAL, POPULATION)');
Query2.SQL.Add('VALUES (:Name, :Capital, :Population)');

Query2.Params[0].AsString := 'Liechtenstein';
Query2.Params[1].AsString := 'Vaduz';
Query2.Params[2].AsInteger := 420000;
Query2.ExecSQL;

2) Нужно купить другой букварь


753   (2005-07-26 14:10:00) [15]

Лучше подкиньте хорошую инфу на нормальном языке (в смысле попроще) по запросам с параметрами


ANB   (2005-07-26 13:57:00) [16]

Ну, для совсем разнородных средств такой подход (через клиента на Delphi), наверное, самый простой. Я переносил данные из оракла в мс скуль и тоже так делал.
Автору : запубликуй ТЗ, подкину пример кода.
(фиксировано ли количество полей в запросе - источнике, одинаковый ли тип данных в одном поле)


Lexer   (2005-07-26 13:41:00) [17]

>[49] Fay ©   (26.07.05 13:33) [49]
>А макросе не придётся публиковать логин/пароль?

Всё решается установкой пароля на проект в книге Excel


Ega23   (2005-07-26 13:36:00) [18]

2 msguns ©   (26.07.05 13:31) [48]
Повыбвав бы ! А просто макрос в екселе или модуль в ацессе нельзя было написать, авжеш ? Вот обязательно как забить гвоздь, так обязательно микроскопом !

Причём через жопу.


Fay   (2005-07-26 13:33:00) [19]

2 msguns ©   (26.07.05 13:31) [48]
А макросе не придётся публиковать логин/пароль?


msguns   (2005-07-26 13:31:00) [20]

>777   (26.07.05 13:14) [45]
>в запросе извлекаются данные из листов Excel, которые связанными таблицами вставляются в Access (это для Ega23, ANB)

Повыбвав бы ! А просто макрос в екселе или модуль в ацессе нельзя было написать, авжеш ? Вот обязательно как забить гвоздь, так обязательно микроскопом !


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

Наверх

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