Форум: "Прочее";
Текущий архив: 2011.03.20;
Скачать: [xml.tar.bz2];
ВнизКнига по 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;
Скачать: [xml.tar.bz2];
Память: 0.64 MB
Время: 0.01 c