PDA

View Full Version : معرفی پارامتر در DBXCommand



کامروا
دوشنبه 16 بهمن 1391, 15:58 عصر
سلام به دوستان:قلب:

توی DBXCommand چطور میتونم به پارامتر ها مقدار بدم؟
بصورت زیر خطا میده !
dbxCommand.Text := 'Insert Into Customers(Name,LName,Tel,Address) '+
'Values(:Name,:LName,:Tel,:Address)';
dbxCommand.Parameters[0].Value := aName;
dbxCommand.Parameters[1].Value := aLName;
dbxCommand.Parameters[2].Value := aTel;
dbxCommand.Parameters[3].Value := aAddress;
dbxCommand.ExecuteQuery();

تشکر

BORHAN TEC
دوشنبه 16 بهمن 1391, 16:44 عصر
سلام
dbxCommand.Parameters[0].Value.AsString := aName;

کامروا
دوشنبه 16 بهمن 1391, 16:52 عصر
ممنون شاهین جان

ولی خطای
Invalid Ordinal : 0
میده !

BORHAN TEC
دوشنبه 16 بهمن 1391, 17:48 عصر
نکته جالبی بود که تا به حال بهش توجه نکرده بودم. به این مثال دقت کن:
var my_dbx_command: TDBXCommand;
my_dbx_parameter: tDbxParameter;
my_dbx_command:= my_dbx_connection.CreateCommand;
my_dbx_command.Text:= 'SELECT * FROM country WHERE currency= ?';
my_dbx_parameter:= my_dbx_parametrized_command.CreateParameter;
with my_dbx_parameter do
begin
DataType:= TDBXDataTypes.AnsiStringType;
// -- ... ooo ... eventually Size, Precision, Scale etvc
end; // with my_dbx_parameter
my_dbx_parametrized_command.Parameters.AddParamete r(my_dbx_parameter);
my_dbx_parametrized_command.Prepare;

نحوه اجرا:
var my_dbx_reader: TDBXReader;
my_dbx_parameter.Value.SetAnsiString(parameter_edi t_.Text);
my_dbx_reader:= my_dbx_parametrized_command.ExecuteQuery;
// -- ... ooo ... use the reader
منبع:
http://www.felix-colibri.com/papers/db/delphi_dbx4_programming/delphi_dbx4_programming.html
http://blogs.embarcadero.com/jimtierney/2009/03/12/31407

کامروا
دوشنبه 16 بهمن 1391, 18:37 عصر
ممنون شاهین جان.

فرض کنید توی دستور Insert قراره 30 تا پارامتر رو مقدار دهی کنیم.
باید واسه هرکدوم از پارامترها، یک متغیر از TDBXParameter ایجاد کنیم و نوعش رو مشخص کنیم و AddParameter کنیم ؟

for each "?", we create a tDbxParameter, filling its properties (mainly type, size)

:افسرده:

BORHAN TEC
سه شنبه 17 بهمن 1391, 19:48 عصر
سلام
متاسفانه بله!
در کل فریم ورک های سطح پایینتر مثل dbExpress و UniDac و ... نمی توانند خیلی از جزئیات را از دید شما مخفی کنند و اگر بخواهید به صورت سطح بالاتری برنامه های مبتنی بر بانک اطلاعاتی بسازید باید از فریم ورک های مبتنی بر ORM استفاده کنید که بر روی فریم ورک های پایه (نظیر dbExpress و UniDac و...) سوار می شوند. یکی از این فریم ورک ها که امروزه خیلی رواج پیدا کرده و نظر کاربران زیادی را به خودش جلب کرده TMS Aurelius است که کار با آن واقعاً ساده و فوق العاده جذاب است و قابلیتهای خیلی خوبی دارد و واقعاً برای ساخت برنامه های بزرگ مناسب است. به عقیده اینجانب اگر یک فریم ورک مبتنی بر ORM به دلفی اضافه نشود Aurelius به یکی از مهمترین فریم ورک های مبتنی بر ORM مبتنی بر دلفی تبدیل خواهد شد و در بین برنامه سازان ارزش بسیار بالایی پیدا خواهد کرد.
موفق باشید...

کامروا
سه شنبه 17 بهمن 1391, 19:54 عصر
متاسفانه بله!
فاتحه ام خوندس...:اشتباه:

ممنون شاهین جان از اینکه وقت میذاری:قلب:
اتفاقا چند تا سوال هم در مورد ORM ها داشتم که بهتره توی یک تاپیک دیگه مطرح کنم.

BORHAN TEC
سه شنبه 17 بهمن 1391, 20:05 عصر
راستی یه سوال برام پیش اومده و اونم اینه که چرا برای Insert و Update و ... از TDBXCommand استفاده می کنی. راه حل های خیلی ساده تری هم وجود داره مثل TSQLQuery. استفاده از TDBXCommand در این شرایط مثل اینه که بخواهیم با الاغ به کره ماه سفر کنیم!:متعجب:

کامروا
سه شنبه 17 بهمن 1391, 20:17 عصر
راستی یه سوال برام پیش اومده و اونم اینه که چرا برای Insert و Update و ... از TDBXCommand استفاده می کنی
اولین باره دارم از این استفاده میکنم و میخواستم تجربه اش کنم. درضمن شما خودتون هم از این روش استفاده کردین توی این تاپیک (http://barnamenevis.org/showthread.php?346750-%D8%AF%D9%84%D9%81%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE&highlight=%D8%AF%D9%84%D9%81%DB%8C+%D8%A8%D8%B1%D8 %A7%DB%8C+%D8%B3%DB%8C+%D8%B4%D8%A7%D8%B1%D9%BE): بخند:. البته قبلش گفته بودین که این کدها مال چند سال پیشه و خیلی حرفه ای نیست:بامزه:


مثل اینه که بخواهیم با الاغ به کره ماه سفر کنیم!
عجب..!:قهقهه:
خب حالا سوال اینجاست که کجاها بهتره از DBXCommand استفاده کنیم؟!

BORHAN TEC
سه شنبه 17 بهمن 1391, 21:17 عصر
خب حالا سوال اینجاست که کجاها بهتره از DBXCommand استفاده کنیم؟!
نمیدونم دقیقاً چی باید بگم ولی باید بدونید که dbxCommand جزو ساختارهای داخلی dbExpress است و زیاد توجیهی نداره که بخواهید به صورت مستقیم از آن استفاده کنید. در حالت کلی برای ایجاد فریم ورک های پایه ای تر یا کامپوننت یا کلاس حتماً باید با ساختارهای داخلی آشنا باشیم. البته منظور من در اینجا از فریم ورک پایه ای ساخت مثلاً یک فریم ورک برای برنامه های انبارداری نیست و در اینجا من در سطح انتزاع پایین تری دارم بحث می کنم به شکلی که آن فریم ورک یا کامپوننت یا کلاس بدون توجه به موضوع برنامه (انبارداری، حسابداری و ...) قابل استفاده باشد. مطمئن نیستم که در رساندن این مفاهیم موفق بوده ام یا خیر ولی به طور خلاصه باید بدانید که کلاس TDBXCommand از جایگاه انتزاعی پایینی در فریم ورک dbExpress برخوردار است. این را هم در نظر داشته باشید که معمولاً از TDBXReader زیاد در کنار TDBXCommand استفاده میشود.