ورود

View Full Version : چگونه می توان وجود رکورد های مشابه را در پایگاه داده فهمید؟



mostafa313
چهارشنبه 13 آبان 1383, 10:46 صبح
چگونه می توان وجود رکورد های مشابه را در پایگاه داده فهمید؟
من می خوام نام-نام خانوادگی-شماره شناسنامه تکراری وارد پایگاه نشه
پیشا پیش متشکرم از اینکه به سوال من جواب می دین

*** دوست عزیز: عنوان سوال را صحیح انتخاب کنید. ***

arshia_
چهارشنبه 13 آبان 1383, 16:44 عصر
راحترین راه اینه که قبل از ثبت هر اسم اول اون رو توی بانک جستجو کنی و اگر مقداری پیدا نکرد بعد ذخیره کنی و گرنه پیغام بدی که این مشخصات قبلا ثبت شده است و مشخصات رکورد پیدا شده را نمایش بدی...
بهتره در هنگام جستجو تمام عبارات رو انتخاب کنی مثلا نام و نام خانوادگی و شماره پناسنامه و... تا حتما یه مقدار منحصر بفرد رو تولید کنه که اشتباه پیش نیاد.

mostafa313
چهارشنبه 13 آبان 1383, 21:17 عصر
خوب اینو می دونم.اما مشکل من کدشه! :oops: چه طوری؟

MiRHaDi
پنج شنبه 14 آبان 1383, 01:03 صبح
سلام

if table1.locate('fieldname',fieldvalue,[]) then
// code here
else
// code here
بای

mostafa313
پنج شنبه 14 آبان 1383, 04:35 صبح
خوب این برای چک کردن یه فیلده اما من میخوام چک کنم سه فیلد(نام-نام خانوادگی-شماره)مشابه نباشد.
چون ممکن است چند نفر باشند که نام و نام خانوادگی انها شبیه هم باشد اما شماره انها فرق داشته باشد.


query.sql.add('select * from user.db')
query.sql.add('where (name=txtname) and (family=txtfamily) and (num=txtnum)')
query.open
if query.bof and query.eof then
رکورد جدید رو اضافه کن
else
پیغام بده رکورد تکراری است و خروج

یه چیزی شبیه کد بالا
اما کد بالا مشکل داره.من که نمی دونم مشکلش کجاست

vcldeveloper
جمعه 15 آبان 1383, 04:46 صبح
اگر کار با خاصیت SQL از Query براتون مشکل ایجاد میکنه می تونید از خاصیت Filter استفاده کنید که در واقع خودش کد SQL رو تولید میکنه و به بانک اطلاعاتی میفرسته. با استفاده از Filtered = True فیلتر اعمال میشه و با FIltered = False جدول از حالت فیلتر خارج میشه.


if query.bof and query.eof then
بجای این می تونید از Query.IsEmpty استفاده کنید.


خوب این برای چک کردن یه فیلده اما من میخوام چک کنم سه فیلد(نام-نام خانوادگی-شماره)مشابه نباشد.
برای ارسال مقادیر چند فیلد به تابع Locate می تونید از VarArrayOf() استفاده کنید. برای اطلاعات بیشتر به راهنمای دلفی برای تابع Locate مراجعه کنید.

mostafa313
جمعه 15 آبان 1383, 05:04 صبح
شما که لطف کردین جواب دادین اگه یه کد کوچولو هم می نوشتین خیلی خوب می شد.

vcldeveloper
شنبه 16 آبان 1383, 02:21 صبح
اگه یه کد کوچولو هم می نوشتین خیلی خوب می شد.
یه چیزی شبیه این:


function EnteredRecordExists: boolean;
begin
with Query do
begin
try
Active := False;
SQL.Clear;
SQL.Add('SELECT * FROM MyTable');
Filtered := False;
Filter := 'ID = ' + QuotedStr(edtID.Text) +
' AND LName = ' + QuotedStr(edtLName.Text) +
' AND FName = ' + QuotedStr(edtFName.Text);
Filtered := True;
Active := True;
Result := not IsEmpty;
Active := False;
except
Active := False;
raise;
end; //try..finallly
end; //with
end;