Главная страница
    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
15-1280768198
George
2010-08-02 20:56
2010.11.14
Помогите подобрать адаптер


3-1247500268
AndrewG
2009-07-13 19:51
2010.11.14
Blob &amp; TOleContainer


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


10-1169798225
tytus
2007-01-26 10:57
2010.11.14
ExcelApplication.RemoteMachineName


4-1241429837
Zalum
2009-05-04 13:37
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский