ورود

View Full Version : سوال: فوری!! پيدا کردن فیلد تکراري جداول 2



alborzi_66
چهارشنبه 30 مرداد 1387, 00:45 صبح
من این سوال رو قبلا مطرح کردم اما جواب منطقی نگرفتم
ببینید من 3 تا جدول به نام های a,b,c دارم و اینکه این جدول ها یک فقط یک رکورد به نام id دارند.
مثال جدول a رکورد id آن شامل اعداد 5و6و7و3و2و1و...
جدول b رکورد id آن شامل اعداد 53و8و5و4و...
جدول c رکورد id آن شامل اعداد 2و1و4و5و1و...
من می خوام اعداد تکراری کل این جدول ها رو تو یه dbgrade1 و نیز یه جدول جدید به نام res نمایش بده و بعدا فیلد هایی که تکراری هستن تعداد هر کدوم و تو یه edit1 نشون بده.
برنامه من اینه

procedure TSEARCH.Button1Click(Sender: TObject);
var
query,values :string;
tedad:integer;
begin
dbgrid1.DataSource:=DataSource1;
//select on a
adoquery1.Close;
adoquery1.SQL.Clear;
query:='SELECT * FROM a WHERE (id =';
query:=query+edit1.Text+')';
adoquery1.SQL.Add(query);
DataSource1.DataSet.Active:=true;
adoquery1.ExecSQL;
tedad:=adoquery1.RecordCount;
//select on b
adoquery1.Close;
adoquery1.SQL.Clear;
query:='SELECT * FROM b WHERE (id =';
query:=query+edit1.Text+')';
adoquery1.SQL.Add(query);
DataSource1.DataSet.Active:=true;
adoquery1.ExecSQL;
tedad:=tedad+adoquery1.RecordCount;
//select on c
adoquery1.Close;
adoquery1.SQL.Clear;
query:='SELECT * FROM c WHERE (id =';
query:=query+edit1.Text+')';
adoquery1.SQL.Add(query);
DataSource1.DataSet.Active:=true;
adoquery1.ExecSQL;
tedad:=tedad+adoquery1.RecordCount;
edit2.Text:=inttostr(tedad);
//inset to res
query:='INSERT INTO res (id, tedad) VALUES (';
query:=query+edit1.Text+','+inttostr(tedad)+')';
adocommand1.CommandText:=(query);
DataSource1.DataSet.Active:=true;
adocommand1.Execute;
end;
تعداد تکراری ها رو نوشتم من قسمت جستجو رو لازم دارم اگه میشه کمکم کنید.
اگه برنامه آماده در این رابطه دارید ممنون میشم

SYNDROME
چهارشنبه 30 مرداد 1387, 06:28 صبح
از چنین کدی می توانید استفاده کنید.


select ID,Count(ID)
from (
Select ID
From Table1
Union
Select ID
From Table2
Union
Select ID
From Table3
) a
Group By ID
having Count(ID) > 1

حالا شما رکوردهای تکراری جداول را با تعداد دفعات تکرار دارید.
موفق باشید

alborzi_66
پنج شنبه 31 مرداد 1387, 20:28 عصر
توضیح می دید که این تیکه برنامه رو در کدوم قسمت و کجا وارد کنم و اینکه من میخوام تو یه dbgrade فیلد های تکراری رو نمایش بدم.

negarin5340
شنبه 09 شهریور 1387, 07:29 صبح
من از پایگاه داده paradox استفاده می کنم و می خواهم در صورتی که اطلاعاتی که میخاهم ذخیره کنم تکراری باشد یک پیغام چاپ کنم اگر ممکنه منو راهنمایی کنید ممنونم

Hsimple11
شنبه 09 شهریور 1387, 10:07 صبح
چون در پارادوکس نمیتونید از ایندکسها بطور قابل اطمینانی استفاده کنید بهتره قبل از هربار Insert رکوردی که میخواهید وارد کنید را در بانک جستجو کنید. مثلا با Locate (همین کلمه را در سایت یا دلفی جستجو کنید) و اگر وجود داشت پیغام بدید و Insert نکنید.

Parial
یک شنبه 17 شهریور 1387, 11:09 صبح
من این سوال رو قبلا مطرح کردم اما جواب منطقی نگرفتم
ببینید من 3 تا جدول به نام های a,b,c دارم و اینکه این جدول ها یک فقط یک رکورد به نام id دارند.
مثال جدول a رکورد id آن شامل اعداد 5و6و7و3و2و1و...
جدول b رکورد id آن شامل اعداد 53و8و5و4و...
جدول c رکورد id آن شامل اعداد 2و1و4و5و1و...
من می خوام اعداد تکراری کل این جدول ها رو تو یه dbgrade1 و نیز یه جدول جدید به نام res نمایش بده و بعدا فیلد هایی که تکراری هستن تعداد هر کدوم و تو یه edit1 نشون بده.
برنامه من اینه

procedure TSEARCH.Button1Click(Sender: TObject);
var
query,values :string;
tedad:integer;
begin
dbgrid1.DataSource:=DataSource1;
//select on a
adoquery1.Close;
adoquery1.SQL.Clear;
query:='SELECT * FROM a WHERE (id =';
query:=query+edit1.Text+')';
adoquery1.SQL.Add(query);
DataSource1.DataSet.Active:=true;
adoquery1.ExecSQL;
tedad:=adoquery1.RecordCount;
//select on b
adoquery1.Close;
adoquery1.SQL.Clear;
query:='SELECT * FROM b WHERE (id =';
query:=query+edit1.Text+')';
adoquery1.SQL.Add(query);
DataSource1.DataSet.Active:=true;
adoquery1.ExecSQL;
tedad:=tedad+adoquery1.RecordCount;
//select on c
adoquery1.Close;
adoquery1.SQL.Clear;
query:='SELECT * FROM c WHERE (id =';
query:=query+edit1.Text+')';
adoquery1.SQL.Add(query);
DataSource1.DataSet.Active:=true;
adoquery1.ExecSQL;
tedad:=tedad+adoquery1.RecordCount;
edit2.Text:=inttostr(tedad);
//inset to res
query:='INSERT INTO res (id, tedad) VALUES (';
query:=query+edit1.Text+','+inttostr(tedad)+')';
adocommand1.CommandText:=(query);
DataSource1.DataSet.Active:=true;
adocommand1.Execute;
end;
تعداد تکراری ها رو نوشتم من قسمت جستجو رو لازم دارم اگه میشه کمکم کنید.
اگه برنامه آماده در این رابطه دارید ممنون میشم



تكه كدي كه دوست عزيزمان SYNDROME گفته اند را برابر رشته Query قرار بده