Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2010.11.14;
Скачать: [xml.tar.bz2];

Вниз

ADO: использование Command в качестве source для Recordset   Найти похожие ветки 

 
Alexander ©   (2009-07-15 10:00) [0]

Здравствуйте!

Мне нужно в качестве source для Recordset использовать Command (именно так, это позволяет использовать как настройки команды, так и настройки Recordset, связанные, например, с расположением и типом курсора и т.д.). Проблема возникает при выполнении следующего кода:

procedure TForm1.Button1Click(Sender: TObject);
var
 RecordsAffected: OleVariant;
 Parameters: OleVariant;
 ADORecordset: Recordset;
 ADOCommand: Command;
 ADOConnection: Connection;
begin
 try
   ADOConnection := CoConnection.Create;
   ADOConnection.Open("Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=E:\Work files\ADO\Database\db1.mdb;Persist Security Info=False", "", "", 0);
   ADOCommand := CoCommand.Create;
   ADOCommand.Set_ActiveConnection(ADOConnection);
   ADOCommand.CommandText := "SELECT * FROM Table1";
   ADOCommand.CommandType := adCmdText;
   Parameters := varEmpty;
   ADOCommand.Execute(RecordsAffected, Parameters, 0); // работает
   ADORecordset := CoRecordset.Create;
   ADORecordset.Open(ADOCommand, varEmpty, adOpenForwardOnly, adLockReadOnly, adOptionUnspecified); // получаем Exception
 except
   on E: Exception do
     MessageBox(Handle, PChar(E.Message), "Error", 0);
 end;
end;

При вызове ADORecordset.Open показывается сообщение об ошибке:
Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.
В корректности большинчтва пеердаваемых аргументов нет особых сомнений, разве что на счёт varEmpty.

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

В сети конкретно по использованию Command как source для Recordset тоже ничего не нашёл, во всех примерах в качестве source использую строку SQL-запроса.

Если кто сталкивался, подскажите пожалуйста, в чём может быть причина ошибки.


 
Ega23 ©   (2009-07-15 10:11) [1]


> ADORecordset: Recordset;


ADORecordset: _recordset;

?


 
Alexander ©   (2009-07-15 12:42) [2]

Спасибо за вариант, но проблема не в этом, да и в ADODB_TLB.pas можно найти такую строчку:
Recordset = _Recordset;

С проблемой разобрался, дело в том, что вместо

ADORecordset.Open(ADOCommand, {-->} varEmpty {<--}, adOpenForwardOnly, adLockReadOnly, adOptionUnspecified);

нужно было вызывать

ADORecordset.Open(ADOCommand, {-->} EmptyParam {<--}, adOpenForwardOnly, adLockReadOnly, adOptionUnspecified);

А EmptyParam - глобальная переменная, объявленная в файле Variants.pas (инициализируется она так: SetClearVarToEmptyParam(TVarData(EmptyParam));)

Т.е., как оказалось, varEmpty и EmptyParam - абсолютно разные вещи.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2010.11.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.003 c
10-1169756215
Asail
2007-01-25 23:16
2010.11.14
Неполный список книг в Excel 2003


15-1280688344
Медвежонок Пятачок
2010-08-01 22:45
2010.11.14
Вон оно чо, михалыч!


3-1247748056
_REA
2009-07-16 16:40
2010.11.14
Выборка Master и Detail


2-1281707135
PavDimka
2010-08-13 17:45
2010.11.14
Передача данных через интернет


15-1281001916
Аналитик
2010-08-05 13:51
2010.11.14
Какая технология лучше для данной задачи?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский