PDA

View Full Version : مشکل با TQuery



h_mohamadi
دوشنبه 28 اردیبهشت 1394, 16:40 عصر
سلام دوستان
من یک TQuery دارم و می خواهم آن را در یک حلقه مرتبا به دیتابیس های مختلف وصل کنم و در آن دیتابیس کاری انجام دهم و مجددا به دیتابیس بعدی وصل کنم
اما فقط در اتصال به دیتابیس اول کار می کند و در باقی ارور زیر را می دهد
131394

و مشکل بعدی هم صفحه دیتابیس لوگین است که می آید
131395

golbafan
پنج شنبه 31 اردیبهشت 1394, 11:28 صبح
1- باید کوئری رو ببندی و متن اش رو تغییر بدی و سپس دوباره بازش کنی

2- در اون کانکشن که داری یک گزینه ای هست به نام login prompt که باید غیر فعالش کنی

h_mohamadi
پنج شنبه 31 اردیبهشت 1394, 13:28 عصر
1- باید کوئری رو ببندی و متن اش رو تغییر بدی و سپس دوباره بازش کنی

2- در اون کانکشن که داری یک گزینه ای هست به نام login prompt که باید غیر فعالش کنی

من این کار را می کنم ولی نمی شود
ضمنا من کوئری را مستقیم به دیتابیس وصل می کنم و آیتم login prompt در کوئری نیست و ParamCheck است و این حلقه for توسط یک ترد از خانواده indy دارد انجام می شود
این کدهای من است


For K:=1 to 10 do
begin
Query1.Active:=False;
Query1.DatabaseName:='Data'+IntToStr(K);
Query1.Active:=True;
Query1.ParamCheck:=False;
Q('select * FROM Data'+IntToStr(K)+' WHERE ....');
end;



به نظر شما من باید چیکار کنم که به ارورهای بالا نخورم

golbafan
پنج شنبه 31 اردیبهشت 1394, 19:20 عصر
یک دقت کن!

گفتم در کانکشن login prompt هست نه در کوئری

adoconnection.loginprompt

ثانیاً شما اگر داری کوئری مینویسی دیگه Query1.DatabaseName:='Data'+IntToStr(K); بی معنیه
این که شما نوشتی برای table درسته نه برای کوئری

این کار رو بکن:

For K:=1 to 10 do
begin
Query1.Close;
Query1.sql.text:='select * FROM Data'+IntToStr(K)+' WHERE ....';
Query1.Open;
end;

h_mohamadi
شنبه 02 خرداد 1394, 10:07 صبح
یک دقت کن!

گفتم در کانکشن login prompt هست نه در کوئری

adoconnection.loginprompt

ثانیاً شما اگر داری کوئری مینویسی دیگه Query1.DatabaseName:='Data'+IntToStr(K); بی معنیه
این که شما نوشتی برای table درسته نه برای کوئری

این کار رو بکن:

For K:=1 to 10 do
begin
Query1.Close;
Query1.sql.text:='select * FROM Data'+IntToStr(K)+' WHERE ....';
Query1.Open;
end;


ممنونم ولی من Query1.DatabaseName:='Data'+IntToStr(K); را به این جهت می گذارم که برنامه باید به دیتابیس های متفاوتی وصل شود که اسم آنها data1 تا data10 است و درون هر کدام از این دیتابیس ها تیبل هایی وجود دارد که پس از اتصال به دیتابیس مورد نظر یک سری کار انجام داده و باید به دیتابیس بعدی برود
حالا به نظر شما من باید چگونه دستورات را بنویسم که این کار را بکند؟؟؟

pezhvakco
شنبه 02 خرداد 1394, 10:52 صبح
شما دارید با
TQuery
از مجموعه ابزار BDE کار می کنید
=>
اگر این طور باشه که اون TQuery نمیتونه مستقیم به DB وصل بشه و اون کد دستور
Query1.DatabaseName
برای اتضال به نام دیتابیس نیست .
در اون مجموعه یه ابزار داره با نام
Database
که تنظیمات با این است.

شابد بهتر باشه با این مجموعه ابزار کار نکنید و با ADO ، DBExpress، FireDAC یا ... کار کنید .

h_mohamadi
شنبه 02 خرداد 1394, 15:30 عصر
من چون از دیتابیس mysql استفاده می کنم مجبورم از TQuery استفاده کنم
من از Database هم استفاده کردم ولی باز هم نشد و ارور اولی را می دهد زمانی که برای بار دوم می خواهد حلقه for را اجرا نماید و مشکل لوگین پرامت حل شد

For K:=1 to 10 do
begin
Database1.AliasName:='Databse'+IntToStr(K);
Database1.Connected:=True;
Query1.Active:=True;
Query1.SQL.Clear;
Query1.SQL.add('select * FROM Tabel WHERE ......');
Query1.ExecSQL;
Database1.Connected:=False;
Query1.Active:=False;
end;

pezhvakco
شنبه 02 خرداد 1394, 17:24 عصر
من چون از دیتابیس mysql استفاده می کنم مجبورم از TQuery استفاده کنم
چه اجباری است : ADO، DBEpress ، MyDACو .. هم میتونند بکار گرفته بشند.

روش اتصال DataBase این کد دستوری که شما نوشتید نیست .
http://barnamenevis.org/showthread.php?261765-%D8%A7%D8%AA%D8%B5%D8%A7%D9%84-%D8%AF%D9%84%D9%81%DB%8C-%D9%88-MySql

http://barnamenevis.org/showthread.php?122964-%D8%A7%D8%AA%D8%B5%D8%A7%D9%84-%D8%A8%D9%87-%D8%A8%D8%A7%D9%86%DA%A9-MYSQL

http://barnamenevis.org/showthread.php?157129-%DB%8C%DA%A9-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D8%B3%D8%A7%D8%AF%D9%87-%D8%A8%D8%A7%D9%86%DA%A9-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA%DB%8C-%D8%A8%D8%A7-%D8%A8%D8%A7%D9%86%DA%A9-MySql

h_mohamadi
یک شنبه 03 خرداد 1394, 12:24 عصر
ممنونم از راهنمایتان مشکل حل شد