PDA

View Full Version : refresh بانک اطلاعاتی



matinebi
یک شنبه 19 خرداد 1387, 01:54 صبح
یک dbgrid داریم که با کلیک روی هر سطر آن یک dbgrid دیگه فراخوانی میشه

سوال:میخوام زمانی که dbgrid دوم بسته میشه dbgrid اول مانند قبل اطلاعات را نمایش دهد نه فقط همان یک رکورد ی که روی آن کلیک شده

matinebi
یک شنبه 19 خرداد 1387, 02:06 صبح
;dataset.SQL.Clear
;dataset.Active:=false
('*dataset.SQL.Add('select
;('dataset.SQL.Add('from tablename
;dataset.ExecSQL
;dataset.Active:=true

این کد refresh بانک رو هم در onclose فرم دوم قرار دادم ولی فایده ای نداره

SYNDROME
یک شنبه 19 خرداد 1387, 05:46 صبح
;
dataset.SQL.Clear
;dataset.Active:=false
('*dataset.SQL.Add('select
;('dataset.SQL.Add('from tablename
;dataset.ExecSQL
;dataset.Active:=true
این کد refresh بانک رو هم در onclose فرم دوم قرار دادم ولی فایده ای نداره
اولا نیازی نیست کد زیر را نویسید.


;dataset.ExecSQL

دوماً کد را به این شکل بنویسید ببینید درست می شود.


dataset.SQL.Clear
DataSet.SQL.Add(' Select *');
DataSet.SQL.Add(' From TableName');
DataSet.Open;

اگر باز هم درست نشد کد زیر را هم امتحان کنید.


DataSet.Filtered := False;

موفق باشید

matinebi
یک شنبه 19 خرداد 1387, 08:30 صبح
کد های که نوشتید جواب نداد

و اطلاعات اولین رکورد در بانک را فقط نمایش میدهد

یا حق

matinebi
یک شنبه 19 خرداد 1387, 20:08 عصر
لطفا راهنمایی کنید
اگه راهی مونده

matinebi
چهارشنبه 22 خرداد 1387, 22:53 عصر
اینم لینک دانلود نمونه برنامه
http://matinebi.persiangig.ir/1.zip


زمانی که فاکتور جزء را میبندم و دوباره میخواهم یک فاکتور دیگر را از لیست فاکتورها انتخاب کنم این ارور را میدهد (اما اگر بعد از بستن فاکتور جزء یک بار روی کلید refresh کلیک کنید دیگه این مشکل پیش نمیاد)

لطفا راهنمایی کنید


Access violation at address 005462c5 in module'project1.exe'.read of address 00000000.

اصغر (پآچ)
پنج شنبه 23 خرداد 1387, 00:18 صبح
عزیزم سلام

من با این چیزی که گذاشتی مشکلی ندارم! فقط با SLable ها که اونم حل شدنیه اما برنامت داره کار خودشو می کنه بذار یکم بیشتر باهاش ور برم اگه مشکلی دیدم باشه در خدمتم

موفق و موید باشی

matinebi
پنج شنبه 23 خرداد 1387, 02:52 صبح
مشکل زمانی پیش میاد که وقتی دوباره روی گرید اول کلیک میکنی ارور میده

dkhatibi
پنج شنبه 23 خرداد 1387, 06:51 صبح
جدول را حتما بسته اید. متن خطا را بنویسید.

matinebi
پنج شنبه 23 خرداد 1387, 08:18 صبح
متن خطا
Access violation at address 005462c5 in module'project1.exe'.read of address 00000000

حمیدرضاصادقیان
پنج شنبه 23 خرداد 1387, 19:07 عصر
سلام.شما وقتی روی گرید اول کلیک میکنی چه کدی نوشتی. شاید اونجا فرمی رو Free کردی که حالا دوباره میخوای بهش دسترسی پیدا کنی ولی اونو دیگه ایجاد نکردی. بهمین خاطر بهت Access Violation میده. پیغام Av زمانی میاد که شما میخوای به شی که وجود نداره دسترسی پیدا کنی.
بگرد ببین چه اتفاقی داره روی کلیک اون گرید میافته . یک Breakpoint قرار بده در رویداد Onclick گرید بعد خط به خط Trace کن ببین کجا خطا میده.

matinebi
پنج شنبه 23 خرداد 1387, 21:41 عصر
if DataModule3.ADOQuery4.IsEmpty then
ShowMessage('ÇØáÇÚÇÊ ãæÑÏ äÙÑ íÏÇ äÔÏ')
else
//***************************************filter factor joz
DataModule3.ADOQuery3.SQL.Clear;
DataModule3.ADOQuery3.Active:=false;
DataModule3.ADOQuery3.SQL.Add('select *');
DataModule3.ADOQuery3.SQL.Add('from factor_joz');
Label1.Caption:=DBGrid1.Fields[0].AsString;
DataModule3.ADOQuery3.SQL.Add('where(sh_fact ='''+label1.caption+''')');
DataModule3.ADOQuery3.ExecSQL;
DataModule3.ADOQuery3.Active:=true;
//***************************************filter factor kol
DataModule3.ADOQuery4.SQL.Clear;
DataModule3.ADOQuery4.Active:=false;
DataModule3.ADOQuery4.SQL.Add('select *');
DataModule3.ADOQuery4.SQL.Add('from factor_kol');
DataModule3.ADOQuery4.SQL.Add('where(sh_fact ='''+label1.caption+''')');
DataModule3.ADOQuery4.ExecSQL;
DataModule3.ADOQuery4.Active:=true;

edit_fact.ShowModal;

matinebi
پنج شنبه 23 خرداد 1387, 21:45 عصر
کد بالا را در رویداد oncolenter گرید اول نوشتم تا هر دو تا جدول فیلتر بشن
لیبل هم مقدار کد مشتری را میگیرد تا بوسیله آن بتوان فیلتر را انجام داد

حمیدرضاصادقیان
پنج شنبه 23 خرداد 1387, 23:23 عصر
سلام.وقتی که داری Adoquery.sql.clear رو اجرا میکنی دیگه نیازی نیست Active اونو False کنی. به خاطر اینکه وقتی کوچکترین تغییری در متن sql بدی خودش Active رو False میکنه. در ضمن اگر هم میخوای اینکارو بکنی باید قبل از Clear اینکارو انجام بدی.



Label1.Caption:=DBGrid1.Fields[0].AsString;

این خط رو چرا وسط کدهات نوشتی؟



DataModule3.ADOQuery3.ExecSQL;

این دستور زمانی به کار میره که شما میخوای یک سری عملیات رو روی دیتابیس اعمال کنی مانند Update کردن insert,delete,alter نیازی نیست برای Select از این خط استفاده کنی.
این خط کافیه


DataModule3.ADOQuery3.Active:=true;


قبل از این دستور میتونی اینو کنترل کنی.


edit_fact.ShowModal


به این صورت بنویس ببین مشکلت حل میشه.


If not assigned(edit_fact) then
application.createform(TEdit_fact,edit_fact);
Edit_Fact.showmodal;


در ضمن شما این خط رو نوشتی


لیبل هم مقدار کد مشتری را میگیرد تا بوسیله آن بتوان فیلتر را انجام داد

خوب اگر این گرید به Adoquery3 وصل هست شما چطوری قبل از اینکه Adoquery رو True کنی داری مقداری رو از Dbgrid که به اون وصله رو بهش پاس میدی؟
در ضمن برای فیلتر کردن میتونی از روش زیر استفاده کنی.


DataModule3.ADOQuery3.SQL.Add('where sh_fact =:Sh_Fact');
DataModule3.Adoquery3.sql.parameters.parambyname(' sh_fact').value:=label1.caption;

گفتم ببین ایا Dbgrid تو به Adoquery3 وصل هست. اگر اینطوریه .این کد رو باید قبل از اینکه Adoquery3.active:=False رو بنویسی قرار بدی.


Label1.Caption:=DBGrid1.Fields[0].AsString;


امیدوارم مشکلت حل بشه.

matinebi
جمعه 24 خرداد 1387, 21:38 عصر
Label1.Caption:=DBGrid1.Fields[0].AsString;
//***************************************filter factor joz
DataModule3.ADOQuery3.SQL.Clear;
DataModule3.ADOQuery3.SQL.Add('where sh_fact :=Sh_Fact');
DataModule3.Adoquery3.parameters.parambyname('sh_f act').value:=label1.caption;
DataModule3.ADOQuery3.open;
//***************************************filter factor kol
DataModule3.ADOQuery4.SQL.Clear;
DataModule3.ADOQuery4.SQL.Add('where sh_fact :=Sh_Fact');
DataModule3.Adoquery4.parameters.parambyname('sh_f act').value:=label1.caption;
DataModule3.ADOQuery4.open;
If not assigned(edit_fact) then
application.createform(TEdit_fact,edit_fact);
Edit_Fact.showmodal;

کد قبلی رو به این صورت تغییر دادم اما erorr زیر را میده


adoquery3:parametr 'sh_fact' not find.

اصغر (پآچ)
جمعه 24 خرداد 1387, 23:11 عصر
Label1.Caption:=DBGrid1.Fields[0].AsString;
//***************************************filter factor joz
DataModule3.ADOQuery3.SQL.Clear;
DataModule3.ADOQuery3.SQL.Add('where sh_fact :=Sh_Fact');
DataModule3.Adoquery3.parameters.parambyname('sh_f act').value:=label1.caption;
DataModule3.ADOQuery3.open;
//***************************************filter factor kol
DataModule3.ADOQuery4.SQL.Clear;
DataModule3.ADOQuery4.SQL.Add('where sh_fact :=Sh_Fact');
DataModule3.Adoquery4.parameters.parambyname('sh_f act').value:=label1.caption;
DataModule3.ADOQuery4.open;
If not assigned(edit_fact) then
application.createform(TEdit_fact,edit_fact);
Edit_Fact.showmodal;

کد قبلی رو به این صورت تغییر دادم اما erorr زیر را میده


adoquery3:parametr 'sh_fact' not find.

سلام دوست من

ببین اینجوری که من دیدم و توی کدی که گذاشتی دستور Select کجا رفت؟


DataModule3.ADOQuery3.SQL.Add('select *');
DataModule3.ADOQuery3.SQL.Add('from factor_joz');


در ثانی کد زیر
DataModule3.ADOQuery4.SQL.Add('where sh_fact :=Sh_Fact'); رو به صورت
DataModule3.ADOQuery4.SQL.Add('where sh_fact =:Sh_Fact'); بنویس

موفق و موید باشی

matinebi
جمعه 24 خرداد 1387, 23:54 عصر
با تشکر از تمام مدیران عزیز و ضمن قدردانی از زحمات شما عزیزان

من کد رو به این صورت نوشتم

Label1.Caption:=DBGrid1.Fields[0].AsString;
//***************************************filter factor joz
DataModule3.ADOQuery3.SQL.Clear;
DataModule3.ADOQuery3.SQL.Add('select *');
DataModule3.ADOQuery3.SQL.Add('from factor_joz');
DataModule3.ADOQuery3.SQL.Add('where sh_fact =:Sh_Fact');
DataModule3.Adoquery3.parameters.parambyname('sh_f act').value:=label1.caption;
DataModule3.ADOQuery3.open;
//***************************************filter factor kol
DataModule3.ADOQuery4.SQL.Clear;
DataModule3.ADOQuery4.SQL.Add('select *');
DataModule3.ADOQuery4.SQL.Add('from factor_kol');
DataModule3.ADOQuery4.SQL.Add('where sh_fact =:Sh_Fact');
DataModule3.Adoquery4.parameters.parambyname('sh_f act').value:=label1.caption;
DataModule3.ADOQuery4.open;

اما باز هم زمانی که گرید دوم رامیبندم و میخوام دوباره روی گرید اول کلیک کنم این ارور

Access violation at address 005462c5 in module'project1.exe'.read of address 00000000
رو میده
من سرس نمونه برنامه رو قرار دادم اگر دیده باشید همین مشکل رو داره اما اگر در فرم 1 روی باتن refresh کلیک کنید مشکل حل میشه
اما من نمی خوام کاربر مجبور بشه روی باتن کلیک کنه

اصغر (پآچ)
شنبه 25 خرداد 1387, 00:45 صبح
سلام دوست من
خوب در رویداد OnClose قرم دومت که گرید دوم توشه همون کدی رو که توی کلید رفرش گذاشتی رو بذار

matinebi
شنبه 25 خرداد 1387, 01:06 صبح
کد رو قبلا قرار دادم اما جواب نمیده فقط زمانی که وارد فرم اول میشم و بعد رو رفرش کلیک میکنم جواب میده

matinebi
شنبه 25 خرداد 1387, 09:48 صبح
لطفا مدیران عزیز سرسی که در صفحه اول قرار دادم رو چک کنید
حیاتییه