Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.03.20;
Скачать: CL | DM;

Вниз

Книга по ADO для не совсем чайника   Найти похожие ветки 

 
sniknik ©   (2010-11-26 22:12) [80]

> я не замечаю разницы.
вот заметная разница, коментариш присвоение для одной из переменных, та и там, например
//kCurrentB := fB.Value;
и
kCurrentB := kRows[1, kRow];

и тест поменяется, примерно так
AdodbRecordset.MoveNext test: Sum of A=350643419; Sum of B=0; Duration=1,4684
AdodbRecordset.GetRows: Sum of A=350643419; Sum of B=0; Duration=1,6076

потому как время передачи никак не поменялось, время "выковыривания" меньше в 2 раза, а именно оно и существенно для рекордсета, и несущественно для взятия из массива.

добавь строк, и ситуация изменится еще более координально.


 
Дмитрий Тимохов   (2010-11-27 00:17) [81]


> sniknik ©   (26.11.10 22:12) [80]


Предлагаю забить на тему GetRows. Я вижу, что в некоторой придуманной нереальности сферического коня в вакуме GetRows дает прирост выковыривания всех данных. Предлагаю сей факт взять на заметку. И все ))

Я АДО не трогал уже лет 10 (сидит все под "фасадами" из интерфейсов, как-то там работает, ну и ладно). Тут что-то решил поделиться опытом, и заодно тракер посмотрел на предмет замечаний по АДО - вылезли только GetRows и проблема перекомпиляции сохраненной процедуры - почему и решил поделиться workaround"ами.


 
Дмитрий Тимохов   (2010-11-29 11:50) [82]

Понимаю, что тема чужая, но т.к. в теме есть знатоки АДО, то задам вопрос тут.

Для обозначения параметра в запросе АДО использует символ вопроса.

Т.е. типа этого

exec MyProc ?, ?

Есть ли возможность использовать именованные параметры, а не символы вопросов?
Например, как-то так

exec MyProc {prm1}, {prm2}


 
sniknik ©   (2010-11-29 12:17) [83]

именованные параметры относятся не к адо, а обертке (т.е vcl), и задают их как обычно не заморачиваясь на конкретику запроса (вот для селекта ты почему то знаешь как, а для exec нет. ну не странно ли?).


 
Дмитрий Тимохов   (2010-11-29 12:24) [84]


> (вот для селекта ты почему то знаешь как, а для exec нет.
>  ну не странно ли?).

ничего не понял, если честно.


 
Anatoly Podgoretsky ©   (2010-11-29 12:26) [85]

> Дмитрий Тимохов  (29.11.2010 12:24:24)  [84]

А откуда у тебя тот текст взялся?


 
Ega23 ©   (2010-11-29 12:34) [86]


> Есть ли возможность использовать именованные параметры,
> а не символы вопросов?
> Например, как-то так
>
> exec MyProc {prm1}, {prm2}


Параметры в VCL и параметры в парсере TSQL - разные вещи.

declare
 @NSQL nvarchar (1000),
 @CLSTableNam varchar (32);

Select @NSQL=Cast(("Select @ObjID=ObjOwner from "+@CLSTableNam+" where ObjID=@ObjID") as nvarchar(1000));

execute sp_executesql @NSQL,
   N"@ObjID int output",
   @ObjID output;



 
sniknik ©   (2010-11-29 12:43) [87]

> ничего не понял, если честно.
вырванное из контекста оно не для понимания, оно для "запудривания мозгов отвечающему"...

вот ты благополучно пропустил часть про обертку... а если эксперимент, типа кинуть на форму ADODataSet и попробовать в нем написать запрос (селект)  с параметром, в where например... получилось?


 
Дмитрий Тимохов   (2010-11-29 12:43) [88]


> Ega23 ©   (29.11.10 12:34) [86]


Олегыч, здесь вопрос чисто про синтаксис Adodb.Command - позволяет ли он работать не только с символами вопросов.

Как сейчас сделано я знаю по профайлеру.
Вот, например, вызов процедуры из профайлеру:

declare @P1 int
set @P1=-2142644853
exec sp_executesql N"exec [mmk2010_tda].[dbo].[ObjectCreate] @P1, @P2, @P3, @P4 output", N"@P1 smallint,@P2 int,@P3 smallint,@P4 int OUTPUT", -32678, -2147464057, 3, @P1 output
select @P1


 
Дмитрий Тимохов   (2010-11-29 12:47) [89]


> вот ты благополучно пропустил часть про обертку... а если
> эксперимент, типа кинуть на форму ADODataSet и попробовать
> в нем написать запрос (селект)  с параметром, в where например.
> .. получилось?


Это же разбираться )
Я штатных компонентов не знаю.


 
sniknik ©   (2010-11-29 12:48) [90]

ну на нет и суда нет, как в анекдоте, нет ножек - нет варенья.


 
Дмитрий Тимохов   (2010-11-29 12:52) [91]


> sniknik ©   (29.11.10 12:48) [90]
>
> ну на нет и суда нет, как в анекдоте, нет ножек - нет варенья.
>


ну я же тебя и не про VCL спрашивал вроде, да?
вопрос был про библиотеку АДО, которая умеет работать только с вопросами.

не вижу особой проблемы самому сделать обертку над sp_executesql - парсить текст запроса на предмет именованных параметров и самому их реализовать в тексте.

другой вопрос, что может "все уже украдено до нас" и в adodb.command есть функционал именованных параметров. я есно посмотрел, и не нашел, может я плохо искал.

а VCL если я за 15 лет не выучил в части работы с БД, то и сейчас не буду.
мне задач по изучению более полезных тем хватает.


 
Ega23 ©   (2010-11-29 13:00) [92]


> другой вопрос, что может "все уже украдено до нас" и в adodb.
> command есть функционал именованных параметров. я есно посмотрел,
>  и не нашел, может я плохо искал.


Насколько я понимаю, от тебя данный вопрос слышать несколько странно, ибо именно ты у нас главный специалист по native-ADO. :)


 
Дмитрий Тимохов   (2010-11-29 13:02) [93]


>
> Насколько я понимаю, от тебя данный вопрос слышать несколько
> странно, ибо именно ты у нас главный специалист по native-
> ADO. :)


я?! да ты что?
Олег, у меня этапами - разобрался в чем-то и забыл - это было в 2000 году последний раз когда я изучал АДО.

просто тут переписываю свой ORM - оптимизирую запросы и задался вопросом, что "вопросы" не есть удобно иногда. может именованные есть? посмотрел, не нашел, спросил... получил ))


 
Ega23 ©   (2010-11-29 13:10) [94]


> я?! да ты что?


Дык я сколько тебя помню, ты всегда говорил, что VCL-обёрткой не пользуешься, ибо у тебя где-то там в numeric-полях несоответствие с BCD-шными типами VCL.

ИМХО: вопросы - геморно, много писанины, часто проблемы с рефакторингом. Но идеологически - более правильно.


 
Anatoly Podgoretsky ©   (2010-11-29 13:56) [95]

> Дмитрий Тимохов  (29.11.2010 12:52:31)  [91]

ADO может работать с параметрами и с placeholder, параметны начинаются с
символа @. а пласехолдер обозначается вопросом, в ado.vcl это символ
двоеточия.


 
Дмитрий Тимохов   (2010-12-03 09:22) [96]


> Anatoly Podgoretsky ©   (29.11.10 13:56) [95]
>
> > Дмитрий Тимохов  (29.11.2010 12:52:31)  [91]
>
> ADO может работать с параметрами и с placeholder, параметны
> начинаются с символа @. а пласехолдер обозначается вопросом, в ado.vcl
> это символ
> двоеточия.


Хочу к этой теме вернуться.
Как работать с плейсхолдером я знаю.
Хочу понять, что ты, Анатолий, сказал про @.

Вот пишу такой код:

procedure TForm1.Button3Click(Sender: TObject);
var
  kCnn: _Connection;
  kCmd: Command;
  kPrm: Parameter;
  kRecordsAffected: OleVariant;
  kRS: Recordset;
begin
  kCnn := CoConnection.Create;
  kCnn.CursorLocation := adUseClient;
  kCnn.IsolationLevel := adXactReadCommitted;

  kCnn.Open(Format("Provider=SQLOLEDB;Server=%s;Database=%s;Trusted_Connection=Yes",
        ["timdim-w2ks\faust", "adodb_test"]),"","",adConnectUnspecified);

  kCmd := CoCommand.Create;
  kCmd.Set_CommandText("select * from adodb_test_table where a = @a");

  kPrm := CoParameter.Create;

  kPrm.Set_Name("a");
  //kPrm.Set_Name("@a"); так тоже пробовал
  kPrm.Set_Type_(adInteger);
  kPrm.Value := 23;
  kCmd.Parameters.Append(kPrm);

  kCmd.Set_CommandType(adCmdText);
  kCmd.Set_ActiveConnection(kCnn);

  kRS := kCmd.Execute(kRecordsAffected, EmptyParam, adCmdUnspecified);
end;


При выполнении возникает исключение с текстом сообщения:
Must declare the variable "@a"

Что я делаю не так? Или я тебя не так понял и с @ работать не должно?
Тогда, что ты имел в виду?


 
Ega23 ©   (2010-12-03 10:17) [97]


> Что я делаю не так? Или я тебя не так понял и с @ работать
> не должно?


declare @a int
set @a=1
select * from adodb_test_table where a = @a


Речь о параметрах к ХП шла.


 
Дмитрий Тимохов   (2010-12-03 10:27) [98]


> Речь о параметрах к ХП шла.


это понятно.

вопрос, можно ли в выражении


 kCmd := CoCommand.Create;
 kCmd.Set_CommandText("select * from adodb_test_table where a = ?");
 kPrm := CoParameter.Create;
 kPrm.Set_Name("a");
 kPrm.Set_Type_(adInteger);
 kPrm.Value := 23;
 kCmd.Parameters.Append(kPrm);


использовать не символ вопроса, а что-то именованное. Например, какое-то сочетания с a. Например, @a, :a или еще как.

В этом и был у меня вопрос исходный.


 
Ega23 ©   (2010-12-03 10:29) [99]

Нет. Точнее, можно, но это тебе свою надстройку вертеть придётся, a-la макросы в TRxQuery


 
Дмитрий Тимохов   (2010-12-03 10:31) [100]


> Ega23 ©   (03.12.10 10:29) [99]
>
> Нет. Точнее, можно, но это тебе свою надстройку вертеть
> придётся, a-la макросы в TRxQuery


собственно все )
надстройка понятно спасет.
думал, что есть.


 
Ega23 ©   (2010-12-03 10:33) [101]

В AnsiSQL нет, значит и в целом нет.


 
Дмитрий Тимохов   (2010-12-03 11:10) [102]


> В AnsiSQL нет, значит и в целом нет.

А причем тут AnsiSQL? Может я что-то не знаю.
Речь то про конкретный ADODB.Command.
Это же он делает обработку вопросиков.



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

Текущий архив: 2011.03.20;
Скачать: CL | DM;

Наверх




Память: 0.66 MB
Время: 0.014 c
1-1249657830
ягость
2009-08-07 19:10
2011.03.20
Удалить строки из RichEdit


15-1291293154
stas
2010-12-02 15:32
2011.03.20
работа с 2-мя мониторами


15-1291268467
JohnKorsh
2010-12-02 08:41
2011.03.20
Можно ли извлечь процедуры и функции из драйвера.


4-1246357819
istok20
2009-06-30 14:30
2011.03.20
запуск процесса из-под сервиса...


4-1244378006
Nikfel
2009-06-07 16:33
2011.03.20
Как файл иконки new.ico поместить в EXE или Dll файл