Форум: "Базы";
Текущий архив: 2002.02.28;
Скачать: [xml.tar.bz2];
ВнизЕсть проблема с ADOCommand Найти похожие ветки
← →
}{unter (2002-02-01 11:45) [0]Выполняю ADOCom : TADOCommand SQL запрос самый элементарный (SELECT * FROM TABLE) написаный в MemoEdit
В RichEdit получаю все поля из TABLE ну это понятно, но вот к записям возвращенным запросом в RecordSet ADOCom.Execute достучаться не могу ! Эта шняга ADO.RecordSet.RecordCount говорит мне, что записей нет возврящая -1 !
Что у меня не так ? Или это с головой ? Помогите плизззз....
ADOCom.CommandText := MemoEdit.Lines.Text;
try
ADO.RecordSet := ADOCom.Execute;
RichEdit.Lines.Text := ADO.FieldList.Text;
if ADO.RecordSet.RecordCount > 0 then
for I := 1 to ADO.RecordCount do
for II := 0 to ADO.FieldCount -1 do begin
ADO.RecNo := I;
RichEdit.Lines.Append(ADO.FieldByName(ADO.Fields[II].Name).AsString);
end
except on E: Exception do
ShowMessage(E.Message)
end;
← →
SergSuper (2002-02-01 12:03) [1]Я в таких случаях хелп читаю, чего и Вам советую
TADOCommand is most often used for executing data definition language (DDL) SQL commands or to execute a stored procedure that does not return a result set. For SQL statements that return a result set, TADODataSet, TADOQuery, or TADOStoredProc is better suited. The Execute method of TADOCommand is, however, capable of returning a recordset. To use that recordset, however, you will need a separate ADO dataset component.
← →
Romul (2002-02-01 12:14) [2]Короче ADOCommand.Execute предназначен для выполнения таких команд как Insert и Delete, которые как сам понимаешь результирующего набора не возвращают, а по умолчанию количество возвращаемых командой Execute (так же как и ExecSQL) равно -1.
← →
}{unter (2002-02-01 12:25) [3]Да тут вот какое дело - хочется сотворить нечто на подобие Query Analyzer ! И кстати на кой хрен тогда TADOCommand.Execute возвращает мне набор полей в _RecordSet ? Ведь ADOCommand.Execute есть функция возращающая именно этот злополучный _RecordSet ?
← →
}{unter (2002-02-01 12:34) [4]Да и еще по поводу там хранимых процедур и их параметров Out не Out всё понятно - но ведь есть пропертя CommandType := cmdText работающая как часы на любой Transact-SQL ? И ADOCommand сбацана для работы не только с хранимыми процедурами но и запросами причём для работы со всеми запросами не выходящими за рамки Transact-SQL !
Так как же всё-таки вернуть данные из _RecordSet возвращаемый TADOCommand.Execute ? И кстати насчёт Хелпа - жидковато там помощи по этому поводу !
← →
Romul (2002-02-01 13:29) [5]Используй TADOQuery.TADOQuery is better suited.
← →
}{unter (2002-02-01 13:43) [6]Romul спасибо !
Просто все эти шняги типа TADOQuery TADODataSet имеют на мой взгляд одну не приятную фишку (чего слава богу лешён TADOCommand)
. Нужно каждый раз для смены запроса сделать Close дать новый SQL запрос а затем снова Open ! С комманд обстоит дело просто здорово Execute и все дела ! Да стало быть надо что-то домысливать и как всегда искать самый извратный вариант !
В Дельфах всё как-то сделано на половину ! Какой компоент не возьми везде всё криво !
← →
Romul (2002-02-01 14:10) [7]Это точно! :)
← →
SergSuper (2002-02-01 14:31) [8]Хе-хе :)
TADOQuery.ExecSQL
Executes the SQL statement for the ADO query.
function ExecSQL: Integer;
Description
Call ExecSQL to execute the SQL statement currently assigned to the SQL property. Use ExecSQL to execute queries that do not return a cursor to data (such as INSERT, UPDATE, DELETE, and CREATE TABLE).
ExecSQL returns an integer value reflecting the number of rows affected by the executed SQL statement.
Note: For SELECT statements, call Open instead of ExecSQL or set the Active property to True.
To speed performance, an application should ordinarily prepare the query by setting the Prepared property to True before calling ExecSQL for the first time.
Но результатов конечно не увидишь.
← →
}{unter (2002-02-01 14:50) [9]SergSuper Ok ! И тебе спасибо за участие и помощь ! Всё нормально разобрался, да действительно ADOQuery полезная штука !
Буду мучить дальше себя, Делфак и MSSQL!
← →
Dok_3D (2002-02-01 15:23) [10]>> Нужно каждый раз для смены запроса сделать Close дать новый >> SQL запрос а затем снова Open !
В TADOQuery не нужно делать никакого Close ... Будь внимательней.
← →
kig (2002-02-01 15:32) [11]2 }{unter © (01.02.02 11:45)
Достучаться можно следующим образом - используйте вместо
ADO.RecordSet.RecordCount
условие (not ADO.RecordSet.EOF)
Вам возращается RecordSet с серверным курсором, значение RecordCount и актуальное кол-во записей в этом случае зависит возможностей OLEDB-провайдера, типа курсора ... положения в наборе данных ...
Об этом лучше всего прочитать в MSDN - описание ADODB.
← →
}{unter (2002-02-01 15:36) [12]kig - вот это по существу ! Да я действительно врубился с EOF и с курсором СПАСИБО !
Dok_3D, а ты не прав !
← →
Romul (2002-02-01 15:51) [13]>В TADOQuery не нужно делать никакого Close ... Будь внимательней.
Если ты попробуешь написать сервер, который работает с СУБД через ADOQuery и не будешь закрывать этот самый query, то п..ц котенку с..ть не будет...
← →
kig (2002-02-01 16:15) [14]2 }{unter © (01.02.02 15:36)
если не используйте DBAwareControls в программе, работайте напрямую через _Command, _Recordset ну и прочим, что там импортированно из ADODB.
Описание в MSDN
Platform SDK
Data Services
...
ADO References
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.02.28;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.004 c