نمایش نتایج 1 تا 10 از 10

نام تاپیک: جستجوی رکوردهای خالی در دیتابیس

  1. #1

    جستجوی رکوردهای خالی در دیتابیس

    سلام دوستان
    من یک بانک دارم که 60000 تا رکورد داره.
    حالا میخوام براساس شماره سند جستجو کنم وسندهای خالی رو پیدا کنم.که دراین بین ثبت نشده اند و در یک memo نمایش بدم
    خودم اومدم از اولین رکورد تا اخرین رکورد یک سرچ گذاشتم و با استفاده از دستور locate اینکارو میکنم ولی خودم خوشم نمیاد خیلی کنده.
    میخوام ببینم روش دیگه ای داره.
    درضمن روی فیلدی هم که سرچ میکنم index دارم

  2. #2
    مهمان
    اگه از adoquery یا query bde استفاده نمایید با یک select کوچک میتونید نتایج دلخواه داشته باشید .

    :موفق:

  3. #3
    VIP آواتار دنیای دلفی
    تاریخ عضویت
    اردیبهشت 1403
    محل زندگی
    یک جایی توی جنوب ایران
    پست
    1,298
    اگر فیلد شما متنی یا memo است می توانید از Full Text Search استفاده کنید بسیار سریع می باشد .

    :D
    پس از دو سال بررسی بلاخره به بازار آمد
    متفاوت و هوشمندانه
    برای ورود کلیک کنید
    IMEN LOCK

  4. #4
    نه دوست من فیلد من متنی نیست بلکه شماره سند رو میخوام جستجو کنم.
    اقای دادوند من از اون select که گفتی چه جوری استفاده کنم روشش رو بکو.

  5. #5
    با سلام
    در اینجا من از جدول کاردکسم رکوردهایی که فیلد نوعشون رسید ثبت شده ولی فیلد سندشون خالی رو پاک کردم.


    delete from Kardex
    where (SanadKind = 'Resid' and SanadID IS NULL)


    موفق باشید
    :موفق:

  6. #6
    ببینید ما مثلا در ورود اطلاعات سند حسابداری به فرض از شماره 1 تا 10 فرضا 1 تا 8 رو سند زدیم سند 9 رو نزدیم و بعد سند 10 رو وارد کردیم.
    حالا میخوایم با یک جستجو به ما نشون بده که سند 9خالیه و ما بیایم سند بعدیمون رو شماره 9 قرار بدیم.
    بازم از همه دوستان ممنون :oops:

  7. #7
    [quote]دوست عزیزم روشی که گفتین میتونه جواب بده اما بسیار کنده. بهینه ترین راه استفاده از خاصیت Join هستش. برای مثال، در جدول زیر من چند مقدار بین 1 تا 10 وارد میکنم ولی 4,6,7,9 رو جا میندازم:
      
    create table sanad(
    sid int)

    insert sanad values(1)
    insert sanad values(3)
    insert sanad values(2)
    insert sanad values(8)
    insert sanad values(10)
    insert sanad values(5)

    create index ix1 on sanad(sid)


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

    به فرض اینکه Min و Max شما 1 و 10 باشن، باید یک جدول مجازی ایجاد کنیم و از 1 تا 10 رو در این جدول وارد کنیم. بعد با یک Join رکوردهای جا افتاده بدست میاد:

    declare @Min int
    declare @Max int
    set @Min=1
    set @Max=10

    declare @tmp table(tid int primary key)
    declare @Counter int
    set @Counter=@Min
    while @Counter <=@Max
    begin
    insert @tmp values(@Counter)
    set @Counter=@Counter+1
    end

    select t.tid from @tmp t left outer join sanad s
    on t.tid=s.sid
    where s.sid is null
    [/quote]

    دوستان من مشکل رو با این کدی که استاد ثباتی راهنمایی کردن حل کردم.
    حالا وقتی میخوام فیلد tid یا sid رو نمایش بدم در یک memo خطا میدهد که نمیتواند یک مقدار null را در یک string بریزد. چه جوری میتونم مشکلمو حل کنم.؟؟؟؟؟؟؟؟

  8. #8
    سلام
    من مشکل بالا رو حل کردم.
    حالا مقدارو میریزه ولی همش صفره :cry:
    من این کد رو نوشتم ولی همش در Recordcount گیر میکنه و مقدارش 421 هست.
    نمیدونم چرا
       for i := 0 to adst.RecordCount do
    begin

    if memSabtNashode.Text=' ' then memSabtNashode.Text:=memSabtNashode.Text+adst. Fieldbyname('tid').asstring
    else
    memSabtNashode.Text:=memSabtNashode.Text+' - '+ adst.Fieldbyname('tid').asstring;

    end;

  9. #9
    مهمان
    نه دوست من فیلد من متنی نیست بلکه شماره سند رو میخوام جستجو کنم.
    اقای دادوند من از اون select که گفتی چه جوری استفاده کنم روشش رو بکو.
    من نمیدونم کجاش مشکل داری ولی یک مثال کوچک برا استفاده از دستور select برات نوشتم.
    adoquery1.sql.text='select * from table1 where name = 'ali' 


    این دستور sql تمام رکوردهایی که مقدار فیلد name شون ali هست رو پیدا میکنه. حالا برا خالی بودن کافیست از مقدار null استفاده کنی .

    :موفق:

  10. #10
    دستت درد نکنه.
    با اون کدی که خودم نوشتم مشکلم حل شد.ممنون از همگی :wink: :flower:

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •