Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Работа с MSSQL. ADO+SDAC. Запрос не выполняется


Автор: hug 5.10.2007, 17:11
Добрый День. Проблема такого:
есть немаленький запросик для бухглатерской формы:
Последнее к чему я пришел это разбивка его выполнения из под Делфей на 2 части

1 часть

Код


set dateformat dmy  if object_id(...) is not null drop table TempTable
Create table  TempTable (.........)
INSERT INTO TempTable (.........) 
exec Proc ......



т.е. идет создание временной таблицы (к сожалению не #) и вставка туда записей.
Proc - хранимая процедура, которая так же не так проста (создание временных таблиц\индексов на них. куча логики и прочее)
Пытаюсь выполнить эту вставку при помощи ADOCommand.

2 часть
Код

select ..... From TempTable 
drop table temp table


Select выполняю TMSQuery из SDAC


1) если Proc возвращает немного записей <1000 то все идет ОК. если больше то выполнение запроса не идет. Delphi как будто замирает и все. Из под MsSql запрос выполняется великолепно. Из под делфи ADOcommand не может выполнится. Подскажите пожалуйста с чем этим может быть связано?

2) Вначале весь запрос шел в одной сессии из TMSQuery. Использовал #TempTable. Но при большом кол-ве записей запрос также не выполнялся из под Делфи. Из под среды MS SQL все выполняется прекрасно

3)Пробовал ADOQuery. На большом числе записей запрос также не выполнялся

4) Какие есть еще варианты выполнегние большого трудного запроса из под Делфи. Средства ADO\SDAC. Может все запихнуть в ADOCommand. Или оно только для DDL а не для селекта.

Вообщем запарился я уже дружить делфи и mssql. повторяюсь из под среды скуля запрос выполнятся отлично и за приемлимое време(даже большое кол-во записей). Бухгалтерия простаивает. Подскажите пожалуйста варианты решения, может-быть свой опыт

Автор: ALeXandrK 5.10.2007, 20:29
Цитата

Может все запихнуть в ADOCommand. Или оно только для DDL а не для селекта.

Оно для любого запроса подходит. Попробуй с его помощью.
Про  TADOQuery вообще забыть лучше - он был создан как альтернатива
TQuery и несет много лишенго.

Лучше всего выполнять все запросы с помощью хранимых процедур (TADOStoredProc) и
TADOCommand.

Автор: hug 6.10.2007, 10:18
я не нашел способа поиметь доступа к датасету возвращенному AdoCommand.

Автор: ALeXandrK 6.10.2007, 12:16
Выдержки из Help`а:
Цитата

A simple component for executing commands (SQL statements that do not return result sets); TADOCommand can be used with a supporting dataset component, or retrieve a dataset from a table; It can connect directly to a data store or use a TADOConnection component.  


Лучше всего для возрата данных подходит TADODataSet. Им и воспользуйся.

Вообще Help хорошая штука и часто выручает, если у тебя его нет, то вот что там написано о компонентах ADO:

TADOConnection
Цитата

A database connection component that establishes a connection with an ADO data store; multiple ADO dataset and command components can share this connection to execute commands, retrieve data, and operate on metadata


TADODataSet
Цитата

The primary dataset for retrieving and operating on data; TADODataSet can retrieve data from a single or multiple tables; can connect directly to a data store or use a TADOConnection component.


TADOStoredProc
Цитата

A stored procedure-type dataset for executing stored procedures; TADOStoredProc executes stored procedures that may or may not retrieve data. It can connect directly to a data store or use a TADOConnection component.   


TADOCommand 
Цитата

A simple component for executing commands (SQL statements that do not return result sets); TADOCommand can be used with a supporting dataset component, or retrieve a dataset from a table; It can connect directly to a data store or use a TADOConnection component.  


Главное подчеркнул smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)