PDA

View Full Version : استفاده از یک ADOQuery در چند فرم فقط به منظور Select



AliReza Vafakhah
یک شنبه 12 آبان 1387, 23:45 عصر
با سلام خدمت همه دوستان :
دوستان من چند وقتی یک برنامه دارم می نویسم و تا حالا شاید باور نکنید بیش از 20 تا 30 خطا مواجع شده ام و به شکر خدا بیشترش را رفع کردم اما این مشکل رو نفهمیدم که چرا :
وقتی از یک ADOQuery استفاده می کنم دفع بعد که می خواهم از همین ADOQuery مجددا استفاده کنم (فقط یک Select ساده انجام دهم) خطا می ده من تمام کارها رو مو به مو انجام میدم Active =false و یا Close و SQL.CLear و ...

راستی من تازه گی با این مشکل برخوردم حالا اگر از دوستان راه حلی بلد هستن راهنمایی کنند

خطایی که میده: مثلا میگه فیلدی که در جدول قبل بوده وجود ندارد (در صورت اینکه جدول قبل دیگر در دستور select تعریف نشده)

tefos666
یک شنبه 12 آبان 1387, 23:50 عصر
سلام دوست عزیز قطعا اینجوری نمیشه مشکلتون رو برسی کرد - نمونه سورس یا کد مربوطه رو بزارید تا اساتید هم نظر بدهند . :متعجب: یا اینکه توضیح جامع تری بدید - بهتره که مصور باشه .

SYNDROME
دوشنبه 13 آبان 1387, 06:39 صبح
یادتان رفته پیغام خطا را بنویسید.
موفق باشید

AliReza Vafakhah
دوشنبه 13 آبان 1387, 11:27 صبح
دوستان من میخوام از تابع زیر چندین بار همرا با select مختلف جدول ها انجام بدم که اما گیر میده




function ShowDarsDetail(Const TableName: String;
const FieldsName: array of string): Boolean;
var
I: Integer;
begin
try
with ADOQuery1 do
begin
Active:=False;
Fields.Clear;
SQL.Clear ;
SQL.Add('Select ');
for I:= 0 to High(FieldsName)-1 do
SQL.Add(FieldsName[i]+',');
SQL.Add(FieldsName[high(FieldsName)]+' from '+TableName);
Active:=True;
Result:=True;
end;
except
Result:=False;
end;
end;




مثلا یک بار جدول x یکبار جدول y و همین طور تا آخر

mafazel
دوشنبه 13 آبان 1387, 13:03 عصر
سلام دوست عزیز
اگه برداشت من درست باشه مشکل اینه که شما فیلد ها رو در زمان طراحی به Query اضافه کردید. (روی ADOQuery دابل کلیک کردید و Add Field کردید) بعد که یه Select روی یه جدول جدید میدید و Active=True می کنید میگه فیلد ها موجود نیستند. راست هم میگه. چون جدول جدید فیلدهای جدید داره.
بنا بر این روی کوئری دابل کلیک کنید و فیلد ها رو حذف کنید و امتحان کنید.
اما مشکلی که در این صورت احتمالا پیش میاد شما میخواهید فیلد ها رو در DBGrid نشون بدید. اما وقتی Add Field نکنید نمیتونید اونا رو به DBGrid بدید. بنابراین باید با برنامه نویسی اونا رو در حین اجرا به DBGrid بدید.
اگه مشکل این نیست بیشتر توضیح بدید.

vcldeveloper
دوشنبه 13 آبان 1387, 15:47 عصر
اما مشکلی که در این صورت احتمالا پیش میاد شما میخواهید فیلد ها رو در DBGrid نشون بدید. اما وقتی Add Field نکنید نمیتونید اونا رو به DBGrid بدید. بنابراین باید با برنامه نویسی اونا رو در حین اجرا به DBGrid بدید.
DBGrid خودش بطور خودکار فیلدهای دیتاستی که بهش متصل باشه را تشخیص میده و نیازی نیست که شما حتما خودتان یکی یکی فیلدها را برایش تعریف کنید.

mafazel
دوشنبه 13 آبان 1387, 16:36 عصر
درست میفرمایید. فقط عنوان ستون ها رو نام فیلدها میذاره که اگه اسم فیلد ها فارسی نباشند که اکثرا هم نیستند، دوستمون در عناوین ستونها مشکل پیدا میکنه که البته اونهم با یه حلقه For مقادیر DBGrid1.Columns[i].Title.Caption رو مقدار دهی کنه مشکل حله.
در کل این روش دوستمون در برنامه های کوچک اشکال نداره اما برای برنامه های بزرگ و مهم فکر میکنم روش استاندارد و جالبی نباشه.

AliReza Vafakhah
سه شنبه 14 آبان 1387, 22:14 عصر
دوستان من آخرین سوالم را دراین تاپیک از دوستان به خصوص افرادی که بیشتر با دلفی کا کردن می پرسم
سوالم من این است که آیا تعداد شی هایی(Data Access ,DBGo) که در تصویر زیر گذاشتم باعث کند شدن برنامه میشه و اگر میشه باید چه کرد؟

از نظر و کمکتون ممنون میشم

mafazel
چهارشنبه 15 آبان 1387, 08:13 صبح
سلام دوست عزیز
بنظر من تعداد شی هاتون بسیار کمه و نباید برنامه کند باشه. ضمنا بنظر میاد برنامه تون برای یک دبیرستانه. در این صورت حدود 500 تا دانش آموز دارید که هر کدام تعداد محدودی درس دارند که کل تعداد رکورد هاتون به 100 هزار نمی رسه بنابرین حداقل تا 3 سال نباید کند بنظر بیاد. البته در جستجو ها ممکنه کمی کند باشه بخصوص اگر چندین شرط رو همزمان اعمال کنید. اگه برنامه کلا کند هست یا مشکل از برنامه نویسی هست یا از کامپیوتری که برنامه روش اجرا میشه.
پیشنهادات من:
- فرم های کم کاربرد رو زمان اجرا Create کنید بعد از استفاده هم Free کنید.
- جداول رو در ابتدای کار باز نکنید (مگر اونهایی که در صفحه اول هستند.) این کار باعث میشه بالا آمدن برنامه سریعتر بشه. هنگام باز کردن هر فرم جداولش هم باز بشه
-در یک Query حتی الامکان رکوردهای کمی رو نشون بدید (حتی 1 رکورد)

vcldeveloper
چهارشنبه 15 آبان 1387, 17:26 عصر
آیا تعداد شی هایی(Data Access ,DBGo) که در تصویر زیر گذاشتم باعث کند شدن برنامه میشه و اگر میشه باید چه کرد؟
تعداد شی های Dataset ایی که در برنامه استفاده می کنید، تاثیر خیلی کمی روی سرعت برنامه شما داره. اون چیزی که روی سرعت برنامه شما تاثیر بسیار زیادی داره اینه که از این اشیاء به چه شکلی استفاده کنید.