ورود

View Full Version : برگرداندن جدول ado به قبل از حالت فیلتر



northkh_rah
پنج شنبه 19 بهمن 1385, 10:38 صبح
من یه جدول ado دارم که روش فیلتر انجام دادم و میخوام بعد از فیلتر دوباره به حالت اول برگرده توی bde با cancel range میشه ولی تویado این رو نداره اگه میدونید با چی میشه این کارو کرد فوری بگین

master13111
پنج شنبه 19 بهمن 1385, 11:07 صبح
adotable1.filtered:=false

northkh_rah
پنج شنبه 19 بهمن 1385, 11:28 صبح
شاید خوب توضیح ندادم من واسه این کار از دستور filter استفاده نکردم یک تابع نوشتم اما اado و cancelrange نداره که به جاش از چی استفاده کنم

Mohammadi_F
پنج شنبه 19 بهمن 1385, 12:29 عصر
از چه تابعی استفاده کردی ؟ چه جوری اونو فیلتر کردی؟
شاید این کمکت کنه ولی اگه کار نکرد بگو تابع ای که استفاده کردی چی بوده شاید بتونم کمکت کنم.
ADOTable.Requery;

m-khorsandi
پنج شنبه 19 بهمن 1385, 12:51 عصر
شاید خوب توضیح ندادم من واسه این کار از دستور filter استفاده نکردم یک تابع نوشتم اما اado و cancelrange نداره که به جاش از چی استفاده کن

دقیقاً همین مهمه که چی نوشتی؟
هر چقدر بهتر و بیشتر مشکلت رو توضیح بدی، نه وقت خودت و نه کسانی که میتونند کمکت کنند رو میگیری.:لبخندساده:

northkh_rah
شنبه 21 بهمن 1385, 07:40 صبح
من یه تابع نوشتم واسه جستجو که اگر قسمتی از متن مورد نظر را بنویسیم مواردی از جدول که شامل این قسمت است رو نشون بده .مثلا اداره کل و اون همه رکورد هایی که توی اون این گزینه رو داره نشون بده اینم بگم که من از دستورات sqlاستفاده نمیکنم و این کار رو واسم سخت کرده و مجبور شدم این تابع رو بنویسم



procedure Tfr_reportmoh1.Button1Click(Sender: TObjectvar);
; i,j,sum:integer
var str1,s1,s2,s3,s4,s5,s6 ,s7:string;
begin
edit1.Visible:=false;
label1.Visible:=false;
button1.Visible:=false;
panel1.Visible:=true;
sb.Visible:=true;
label2.Visible:=false;
adotable1.Open;
adotable2.Open;
adotable2.Edit;
while adotable1.Eof=false do
begin
s1:=adotable1.FieldValues['nam'];s2:=adotable1.FieldValues['famil'];
s3:=adotable1.FieldValues['semat'];
s4:=adotable1.FieldValues['mohalkh'];
s5:=adotable1.FieldValues['shahr'];
s6:=adotable1.FieldValues['tell'];
s7:=adotable1.FieldValues['address'];
str1:=edit1.Text;
i:=pos(str1,s4);
label2.Caption:=inttostr(i
if i<>0 then
adotable2.InsertRecord([s1,s2,s3,s4,s5,s6,s7]);
adotable1.Next;
end;
adotable2.Edit;
adotable1.First;
sb.panels.items[0].text:=inttostr(adotable2.recordcount);
sum:=strtoint(sb.panels.items[0].text);
end;


این برتابع از یک جدول کمکی استفاده میکنه موردی که میخواهیم جستجو کنیم تو textbox مینویسیم و تابع اونو با عناصر فیلد مورد نظر مقایسه میکنه (با دستور pos) و اگر در ان ها یافت شد انها را با فیلد های دیگری که نیز است در جدول دوم نمایش میدهد . ولی وقتی برای چندمین بار ازش استفاده میکنیم نتایج جستجو قبلی که توی جدول دوم وجود داشته رو هم نمایش میده .من قبلا از این تابع برای bde استفاده کردم و با گذاشتن table.cancelrange مشکلم حل شده ولی ado این متد رو نداره

V60
شنبه 21 بهمن 1385, 22:28 عصر
سلام
می گما، خیلی ناجور کد می نویسی :لبخند: من فکر می کردم فقط خودم خیلی بد جور کد می نویسم، هدفت خیلی توپه ولی روشت فکر کنم جالب نباشه، البته ببخشیدا!
اگر بخواهم برای همین روش شما جواب بذارم با توجه به اینکه سه بار متنت را خواندم ، به این نتیجه رسیدم که تو می خواهی دفعه دومی که از این تابع استفاده می کنی ، نتایج دفعه قبل پاک بشه ، درسته؟ اگر منظورت اینه باید جدولت را پاک کنی که اون هم به وسیله یک کوری به راحتی حل می شه با این دستور که توی کوری نوشته می شه حلش کرد


delete from table2

و بعد اول ان تابعتان بنویسید


adoqouery1.ExecSQL;

که بدین وسیله جدول دومت خالی می شه البته در کدی که در کوری می نویسی به جای table2 نام اصلی جدولتان را وارد کنید.
اگر هم نمی خواهید از کوری و دستورات اس کیو ال استفاده کنید !!!! که من نمی دونم چرا
از همان حلقه استفاده کنید


adotable2.open;
adotable2.frist;
while not (adotable2.eof) do
begin
adotable2.delete;
end;

next هم نمی خواهد
ضمنا در تابعی که نوشته اید فکر کنم اگر کد frist که بر روی جدول 1 قرار دارد را اول بنویسید بسیار بهتر باشد .
امیدوارم جوابتان را بعد از چند روز گرفته باشید ، البته خداییش تقسیر خودتان بود

northkh_rah
دوشنبه 23 بهمن 1385, 08:00 صبح
ممنون از راهنماییتون .دلیل نوشتن این تابع نوع جستجویی بود که من میخواستم یعنی قسمتی از یه رکورد را بنویسیم و تمام رکوردهایی که شامل این هستند را نشان بدهد موارد زیادی رو امتحان کردم و لی اونها فقط به نزدیک ترین رکورد اشاره میکردند بعد مجبور شدم این رو بنویسم که جالب نیست اگر شما راه بهتری رو سراغ دارید بگین ممنون میشم

V60
دوشنبه 23 بهمن 1385, 23:15 عصر
البته فضولیه، ولی چرا از دستورات اس کیو ال استفاده نمی کنید؟ تو دستورات چیزه بدی هست یا اینکه چون تا حالا سراغشون نرفته اید ، استفاده نمی کنید .
به هر حال
اون چیزی که شما می خواهید فکر کنم این باشد
اینها را در قسمت SQL از یک کوری بنویسید


select *
from table
where field like '%' + :temp + '%'

و بعد از کوری استفاده کنید یعنی بنویسید



ADOQouery1.close;
ADOQouery1.parameter.parambyname('temp').asstring: =edit1.text;
ADOQouery1.open

و از این کوری مثله یک جدول استفاده کنید یعنی به یک دی بیگرید یا هر چیزه دیگر متصل کنید
اگر می خواهید متنی که در ادیت می نویسید در همه فیلدهای رکوردها جستجو شود هم می توانید با or انها را در شرطهای اس کیو ال قرار بدهید.
البته من نمی دونم نمی خواهید از اس کیو ال استفاده کنید یا نمی توانید؟ موفق باشید

arashsb2000
جمعه 26 مرداد 1386, 19:37 عصر
روش کد نویسیت به قول بچه ها گفتنی ناجوره ، ببخشیدا البته . می تونی برای پر کردن مقادیر پارامتر هات حداقل یه For بنویسی اینجوری اون کسی که می خواد کمکت کنه و کدهات رو بخونه حداقل گیج نمیشه به خدا . موفق باشی . آرش هنرور ./

arashsb2000
جمعه 26 مرداد 1386, 19:40 عصر
For I := 0 To 3 Do
Begin
with TEdit(FindComponent('EFind' + IntToStr(I+1))) do
Begin
... . . . . . .
. . . . .

arashsb2000
جمعه 26 مرداد 1386, 19:42 عصر
For I := 0 To 3 Do
Begin
with TEdit(FindComponent('EFind' + IntToStr(I+1))) do
Begin
.
.
.