PDA

View Full Version : دستور تیک یک فیلد با توجه به مقایسه 2 فیلد دیگر در یک جدول بانک اکسس



khoshblagh
یک شنبه 10 اردیبهشت 1391, 08:04 صبح
با سلام خدمت دوستان
یک جدول اکسس را در نظر بگیرید با یک فیلد بولین و 3 فیلد عددی . با چه دستوری میتوان فیلد بولین را به true تبدیل نمود با این شرط که فیلد 1 از یک رکورد = فیلد 2 از یک رکود دیگر باشد(این 2 رکورد لزوما متوالی نمیباشند) و فیلد 3 هر دو رکورد با هم برابر باشد.اگر این مقایسه مربوط به 2 جدول بود مشکلی نبود ولی من تا به حال مقایسه این نوع در یک جدول انجام نداده ام . حالا من به دنبال بهترین روش برای انجام این کار بر اساس یک جدول میگردم. توضیح اینکه با یافتن دو رکورد که شرط فوق را دارا باشد باید نسبت به true نمودن فیلد بولین هر دو اقدام گردد. متشکرم

as13851365
یک شنبه 10 اردیبهشت 1391, 09:33 صبح
سوالتون خیلی نامفهوم هستش

یک جدول چهار تا فیلد داره
F1,F2,F3,F4

شما می خواهید بگید که
اگر F1 از هر رکوردی با F2 از هر رکورد دیگه اگه با هم برابر بود و باز اگه F3 هر دو رکورد با هم برابر بود F4 هر دو رکورد رو True کنه درسته ؟
برای این کار می تونی از دستورات SQL استفاده کنی .

اگه اشتباهه بیشتر توضیح بده

khoshblagh
یک شنبه 10 اردیبهشت 1391, 10:06 صبح
با سلام خدمت دوست عزیز
بله درست است.من دنبال دستور sql آن میگردم. متشکرم

tiphooo
سه شنبه 12 اردیبهشت 1391, 00:15 صبح
شما دستور ات SQL مربوطه را در یک ADOQuery بگذارید و به به شکل زیر فراخوانی کنید
T1 : نام جدول
F1 : فیلد اول و بولین
F2,F3,F4 : فیلدهای عددی

UPDATE T1
SET F1=1 FROM (SELECT * FROM T1)i
WHERE i.F2=T1.F3
AND i.F4=T1.F4


دستورات را در خاصیت SQL ،ADOQuery بگذارید وبه شکل زیر فراخوانی کنید
ADOQuery1.Close;
ADOQuery1.ExeSQL;

khoshblagh
سه شنبه 12 اردیبهشت 1391, 09:30 صبح
با تشکر از جناب آقای tiphooo
من دستور را این طور نوشته شد
with rptMoghayer.qryTikDaftarSanad do
begin
Close;
SQL.Clear;
SQL.Text:='UPDATE '+strTableHesab+' set Tik=1 FROM (SELECT * FROM '+strTableHesab+
')i WHERE i.Variz='+strTableHesab+'.Bardasht AND i.Sanad='+strTableHesab+'.Sanad';
ExecSQL;
end;

اما خطا سینتکس زیر حاصل شد. علت چیست؟

86539

tiphooo
سه شنبه 12 اردیبهشت 1391, 23:43 عصر
ظاهرا متغیر strTableHesab شما درست مقدار دهی نشده . یا انتهای رشته را به 0# ببندید و گرنه ساختار نوشته شده کاملا درست است
اگر strTableHesab از نوع رشته ای باشد فکر نکنم مشکل داشته باشید . یک بار بدون استفاده از متغیر و با استفاده از نام خود جدول تست کنید اگر مشکلی نبود مقدار دهی متغیر strTableHesab را بررسی کنید

khoshblagh
چهارشنبه 13 اردیبهشت 1391, 10:17 صبح
ظاهرا متغیر strTableHesab شما درست مقدار دهی نشده . یا انتهای رشته را به 0# ببندید و گرنه ساختار نوشته شده کاملا درست است
اگر strTableHesab از نوع رشته ای باشد فکر نکنم مشکل داشته باشید . یک بار بدون استفاده از متغیر و با استفاده از نام خود جدول تست کنید اگر مشکلی نبود مقدار دهی متغیر strTableHesab را بررسی کنید
با سلام خدمت استاد گرانقدر
با استفاده از نام خود جدول هم همین مشکل برقرار است. اما در رابطه با بستن انتهای رشته متوجه منظور شما نشدم . لطفا در این باره توضیح بدهید. متشکرم

khoshblagh
یک شنبه 17 اردیبهشت 1391, 08:36 صبح
با سلام خدمت دوستان
مشکل این کد چیست ؟ متشکرم.

86718

tiphooo
یک شنبه 17 اردیبهشت 1391, 10:44 صبح
دوست عزیز ظاهرا چون از Access استفاده کردی دستورات Update رو به شکل TSQL قبول نمی کند و این رو باید از دوستان Access کار بپرسی
ولی به هر حال با این کد مشکلت حل می شه

with qry1 do
begin
Close;
SQL.Clear;
SQL.Text:='SELECT P.ID,P.Tik FROM '+
' (SELECT * FROM Daftar)P '+
' INNER JOIN (SELECT * FROM Daftar)Q ON P.Field5=Q.Field6 AND P.Field3=Q.Field3 ';
Open;
First;
while not Eof do
begin
Edit;
qry1['Tik']:=True;
Post;
Next;
end;
end;