PDA

View Full Version : مشکل در کیوری = به جای like



matinebi
شنبه 31 مرداد 1388, 08:33 صبح
میخوام به جای این کد

if Length(arr) > 0 then
Str1 := 'Where no_ghate like ' + quotedStr('%' + arr[0] + '%' ) ;
for i:= 1 to High(arr) do
Str1 := Str1 + ' or no_ghate like ' + quotedStr('%' + arr[i] + '%' ) ;

ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from kala');
ADOQuery1.SQL.Add(Str1);
ADOQuery1.open;


از کد

if Length(arr) > 0 then
Str1 := 'Where no_ghate = ' + quotedStr( arr[0] ) ;
for i:= 1 to High(arr) do
Str1 := Str1 + ' or no_ghate = ' + quotedStr( arr[i] ) ;

ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from kala');
ADOQuery1.SQL.Add(Str1);
ADOQuery1.open;

استفاده کنم

کد اول درست عمل میکنه ولی من به like نیاز ندارم باید حتمی از = استفاده کنم

مشکل:در کد دوم زمانی که آرایه یک کالا داشته باشد هیچ فیلدی برنمیگردونه زمانی که دو تا کالا داشته باشد کالای اولی رو برمیگردونه زمانی که سه تا کالا داشته باشد دو تای اولی رو برمیگردونه به همین ترتیب....

مشکل کجاست

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

hadisalahi2
شنبه 31 مرداد 1388, 23:30 عصر
با سلام من به شما توصیه میکنم به جای اینکه مقادیر رو مستقیم داخل دستور SQl بنویسی از روش تعریف پارامتر استفاده کن.چون هم مدیریت و هم خطایابیش خیلی ساده تره

matinebi
یک شنبه 01 شهریور 1388, 15:08 عصر
با سلام من به شما توصیه میکنم به جای اینکه مقادیر رو مستقیم داخل دستور SQl بنویسی از روش تعریف پارامتر استفاده کن.چون هم مدیریت و هم خطایابیش خیلی ساده تره

میشه لطفا کد بنده رو با روش تعریف پارامتر تغییرش بدین
خیلی ضروریه

با تشکر

shervin farzin
یک شنبه 01 شهریور 1388, 21:02 عصر
سلام
من يك جدول ساختم با فيلدي به نام no_ghate از نوع String و داخلش رشته هايي به شكل
كلي *#* ذخيره كردم( * علامت كاركتر و # علامت عدد هست ).
كد زير رو داخل برنامه براش اجراء كردم.

var
i,j: integer;
arr: array of string;
str1: string;
begin
j:=2;
SetLength(arr,j);
for i := 0 to j-1 do arr[i]:='a'+inttostr(i)+'a';
if Length(arr) > 0 then Str1:='Where no_ghate = '+quotedStr(arr[0]);
for i:= 1 to High(arr) do Str1:=Str1+' or no_ghate = '+quotedStr(arr[i]);
ADOQuery1.SQL.Text:='Select * from table1 '+str1;
ADOQuery1.Open;

اين كد درست كار ميكنه. نظر من اينه كه شما در پر كردن آرايه arr دچار مشكل شديد.
اگر كد اون بخش رو بنويسيد بهتر ميشه كمك كرد.
اگر شكل كلي برنامه شما با اونچه كه من اجراء كردم فرق ميكنه، لطفا به من يادآوري كنيد.
موفق باشيد.

matinebi
سه شنبه 03 شهریور 1388, 14:57 عصر
مثالی از برنامه به همراه کامپوننت آن را لطفا دانلود کنین

http://matinebi.persiangig.com/test1.zip

باتشکر

shervin farzin
سه شنبه 03 شهریور 1388, 18:22 عصر
سلام
برنامه شما رو ديدم.
اشكال كار از بخشي بود كه سعي كرده بوديد Item هاي انتخابي رو بر اساس كاركتر "," از هم جدا
كنيد. من اين بخش از كد شما رو اصلاح كردم. كد زير رو روي دكمه Search بنويسيد:

var
str1: String;
i,j,idx: Integer;
arr: array of String;
begin
SetLength(arr,CheckedComboBox1.CheckedCount);
i:=1;
j:=1;
idx:=0;
str1:=CheckedComboBox1.GetText;
for i := 1 to Length(str1) do
if str1[i]=',' then
begin
arr[idx]:=copy(str1,j,i-j);
inc(idx);
j:=i+1;
end;
arr[idx]:=copy(str1,j,i-j);
if Length(arr) > 0 then
begin
Str1 := 'Where no_ghate = ' + quotedStr(arr[0]);
for i:= 1 to High(arr) do Str1 := Str1 + ' or no_ghate = ' + quotedStr(arr[i]) ;
ADOQuery1.SQL.Text:='Select * from kala '+str1;
ADOQuery1.Open;
end;

موفق باشيد.