Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
2-1293439574
NanoTek
2010-12-27 11:46
2011.03.20
Поменять шрифт Редактора кода


3-1254149519
Diplomat
2009-09-28 18:51
2011.03.20
Использование доменов в IB FB


15-1291290387
Andy BitOff
2010-12-02 14:46
2011.03.20
DMClient и D2010


2-1293361752
vitge
2010-12-26 14:09
2011.03.20
Массив в ComboBOX


15-1291411776
Юрий
2010-12-04 00:29
2011.03.20
С днем рождения ! 4 декабря 2010 суббота





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский