مشاهده نسخه کامل
: جستجو در ديتا بيس به صورت تكه اي از كلمه
romixery
30-03-2007, 12:12
دوستان عزيز سلام
من يه مشكلي دارم كه واقعا توش موندم.
مي خوام يه برنامه براي بانك سي دي بنويسم يعني نوشتم. فقط تو يه قسمت گير كردم.
تو قسمت جستجوي سي دي حتما بايد نام كل سي دي را وارد كنيد تا براتون بيارتش. ولي من نمي خوام اينطوري باشه.
مي خوام اين جوري باشه: مثلا اگه نام سي دي اينه ( ويندوز ويستا) هستش ، فقط با وارد كردن كلمة (ويستا) ليست كليه سي دي هايي كه شامل اين كلمه است رو برام بياره از جمله همين (ويندوز ويستا).
من از دستور Locate هم استفاده كردم ولي اين دستور فقط اولين كلمه رو پيدا مي كنه (مثلا در اينجا فقط {ويندوز} رو پيدا مي كنه). در ضمن مي خوام بعد از اينكه نتايج جستجو را پيدا كرد يه جوري اونا را از كل سي دي ها ----- كنه و بعد از زدن مثلا يك كليد دوباره ليست كليه سي دي هاي توي بانك رو بياره.
اگه كمكم كنيد خيلي خيلي ممنونم. اگه جواب دادين به اين ايميل بفرستينش تا زودتر ببينم.
romixery@gmail.com
ممنون:31:
مرد مباح
30-03-2007, 13:03
دوستان
اين كار دقيقا به ديتابيسي كه استفاده مكنين بستگي داره.
يعني يا بايد كامپيوتر رو گول بزني كه كار سختشه و يا ديتابيست اين امكانو بهت ميده.
اگه ديتابيس فرمان رو ساپورت كنه كه هيچ. با يك ----- ساده ميتوني اين كارو بكني.
ولي حالت سختش اينه كه ناچاري يك فيلد منطقي اضافي ايجاد كني و براي اين كار يك حلقه درست كني كه همه مغادير فيلدها رو چك كنه.
اگه شامل پارامتر خاص بود مقدار منطقي رو True و در غير اين صورت False كنه.
براي اينكه بدوني يك تيكه توي مقدار كلي هست يا نه فكر ميكنم بايد از تابع at استفاده كني. ولي درست يادم نيست.
اگه نتيجه نگرفتي خبر بده تا به صورت كدي بهت بدم.
سلام
لطفآ اگر میشه نوع دیتابیس و دستور locate که ازش استفاده کردی رو اینجا بزار.
تا فرمان یا راه حلش پیدا کنم. موفق باشی . بای
delphianddotnet
31-03-2007, 13:58
سلام
اين كدش خيلي راحته كافيه 3 تا تاپيك پائينتر رو ببيني!
سلام
لطفآ لینک مستقیم تاپیک رو بزارید.
این هم لینک تاپیک ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) .
اگر مشکل حل نشد خبر بدید.
موفق باشید . بای
romixery
01-04-2007, 10:06
سولجر جان سلام
من همونيم كه مي خواستم در بانك اطلاعاتي به صورت تكه از كلمه جستجو كنم.
راستش من تو اون تاپيك هايي كه گفتي نتونستم راه حلشو پيدا كنم.
گفته بودين كه نوع بانك اطلاعاتي رو بهتون بگم.
نوع بانكم Prodex هستش و به صورت Table.
دستور Locate هم به اين صورت نوشتم.
Table1.Locate(search.text);
درست نوشتمش يا نه؟ چون من مثل شما حرفه اي ها نيستم.
Search هم همون EditBox اي هستش كه كلمه مورد نظر براي جستجو را ميگيره.تابلويه ديگه.
حالا اگه ميشه راه حل درست حسابيشو بهم بگين. چون هنوز هيچ كس جواب كامل و درستشو بهم نداده.:10:
mahdi bg
03-04-2007, 05:11
سلام
فکر کنم اگه از ADOQuery استفاده کنی خیلی بهتره
سلام
این دیتابیسی که ازش استفاده میکنید همچین قابلیتی رو نداره.
اگر هم داشته باشه من کدش رو ندارم.
موفق باشی . بای
سلام
من از دوسنان برنامه نویس تعجب میکنم! :41: چون این سوال خیلی ساده است
تنها کاری که باید بکنی اینکه تو select در قسمت شرط از دستور like استفاده کنی
به این صورت
Where "Field of cd" LIKE "%Input text%";v
این v آخری اضافه است چون درست نشون نمیداد نوشتمش اونو پاک کن:15:
موفق باشی بای
elyar جان سلام
از شما بسيار ممنونم كه اين سوال رو بالاخره جواب دادين.
البته فكر كنم كه اين راه حل شما براي ديتابيسي هست كه از نوع SQL تعريف شده. اين در حاليه كه من از ديتابيس Prodex7 استفاده مي كنم.
خب ولي اشكال نداره اگه به SQL كار حل مي شه. بانك رو از نو مي نويسم. البته از نوع SQL. بازم متشكر.
دستور شما رو امتحان مي كنم. اگه جواب نداد بازم مزاحم مي شم.
romixery عزیز سلام
ديتابيسي از نوع SQL معنی نداره، چون sql نوع نیست بلکه زبان پرسجو از دیتا بیس هستش و روی همه دیتا بیسا جواب میده فقط باید بلد باشی چجوری ازش استفاده کنی. اطلاعات خواستی در خدمتم در ضمن لطف کن جواب پستها رو تو تاپیک بده که بقیه هم بتونن استفاده کنن
مرد مباح
10-04-2007, 15:49
دوست عزيز.
من مطابق با چيزي كه در پست 2 گفتم عمل كردم و كدش در زير هست.
براي اين كار هم يك فيلد با نام Chk از جنس Boolean در ديتابيس ساختم واينو برات نوشتم.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
مرد مباح
10-04-2007, 16:01
براي توضيح هم بگم كه :
1. اسم لينك اطلاعاتي در كدي كه نوشتم (از هر نوعي كه ميخواهد باشد) ، Data نام دارد.
2. تابع Pos هميشه به دنبال مقدار اول در مقدار دوم ميگردد . بنابراين بايد مقادير تابع را در مثال قبل عوض كني تا نتيجه درست و دلخواهت رو بگيري. مقدار خروجي اين تابع شماره حرفي است كه تكه اول در تكه دوم شرو ميشود.
3. من با يك EditBox مقدار را گرفته و با فيلد Name در داخل ديتابيس مقايسه كردم.
بازم اگه مشكلي بود و سوالي داشتي خبرم كن.
مرد مباح
10-04-2007, 16:26
romixery عزیز سلام
ديتابيسي از نوع SQL معنی نداره، چون sql نوع نیست بلکه زبان پرسجو از دیتا بیس هستش و روی همه دیتا بیسا جواب میده فقط باید بلد باشی چجوری ازش استفاده کنی. اطلاعات خواستی در خدمتم در ضمن لطف کن جواب پستها رو تو تاپیک بده که بقیه هم بتونن استفاده کنن
دوست عزيز.
ديتابيسهاي قديمي فرامين SQL رو ساپورت نميكنن و به ناچار بايد از فرامين و كلكهاي عجيب غريب استفاده كني.
البته تا جايي كه من ميدونم.
براي مثال ديتابيسهاي قديمي فاكسپرو و پارادوكس از اين نوع هستند.
ولي اگر اشتباه ميگم لطفا راهنمايي كن.
romixery
11-04-2007, 16:23
يك دنيا ممنونم مرد مباح
فكر كنم كارم راه بيفته. اميدوارم شما هم هر مشكلي داري حل شه
قربونت
Romixery
romixery
11-04-2007, 17:21
مرد مباح عزيز سلام
متاسفانه بازم كارم راه نيفتاد.
قبل از همه اينو بگم كه كار با تابع pos رو بلد بودم. و كاربرد اين تابع در اينجا جالب بود. و اما بعد...
اين تابعي كه شما نوشتين يه اشكال اساسي داره اونم اينه كه توي اون شرطي كه نوشتين تا مقدار جدول با مقدار Editbox مقايسه بشه، قسمت زير اشكال داره.
Data.Fieldvalue['name']در اينجا اشكال داره
يعني برنامه نمي تونه اين كار را انجام بده و نام Fieldvalue در ليست AutoComplition براي Data وجود نداره. راستش براي منم عجيبه كه نمي تونه اين كار رو انجام بده. حتي از Query هم به جاي Table استفاده كردم ولي بازم جواب نداد.
راستي شما كه ميگيد بانك اطلاعاتي از نوع Prodex قديمي هست پيشنهاد ميدين از كدوم نوع بانك استفاده كنم؟
بازم ممنون
romixery
11-04-2007, 17:55
مرد مباح عزيز سلام
آقا شرمنده. ولي دستون درد نكنه. درستش كردم
با يك كم تغيير در تابع شما تونستم درستش كنم. فقط يك متغير String تعريف كردم و Data.FieldValue رو به اون نسبت دادم. درست شد.
تابع درستش رو اينجا مي زارم تا همه ببينن. بازم يك دنيا ممنون
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
مرد مباح
11-04-2007, 23:26
ميتونستي از يك راه ديگه مثل FieldbyName هم استفاده كني تا حل بشه.
ضمنا اگه از اكسس ويا اس كيو ال استفاده كني خيلي قويتر و سريعتر و همچنين راحتر كار ميكني.
چون ديگه با چندتا فايل سروكار نداري و با يك فايل كار ميكني.
خوشحالم كه مشكلت حل شد.
موفق باشي.
دوست عزيز.
ديتابيسهاي قديمي فرامين SQL رو ساپورت نميكنن و به ناچار بايد از فرامين و كلكهاي عجيب غريب استفاده كني.
البته تا جايي كه من ميدونم.
براي مثال ديتابيسهاي قديمي فاكسپرو و پارادوكس از اين نوع هستند.
ولي اگر اشتباه ميگم لطفا راهنمايي كن.
سلام دوست عزیز
تو اشتباه میکنی، زبان پرسجوی SQL رو تمام DBMS های تحت ویندوز حتی پارادوکس جواب میده. فقط کافیه که بجای کامپوننت TTable از کامپوننت TQurey استفاده کنی و در قسمت SQL عبارت پرسجو رو بنویسی هم خیلی راحته و هم جواب قطعی و سریع بهت میده. روشهایی که تو این تاپیک مطرح شدن یکی یکی رکوردها رو جستجو می کنند که برای یه دیتا بیس بزرگ خیلی کند عمل میکنه ولی SQL برای تمام دیتا بیسها بسته به امکانات DBMS سریع ترین جواب رو میده.
فقط رو دیتا بیسهای تحت داس ممکنه جواب نده که اون رو هم امتحان نکردم و نمیدونم ولی رو پارادوکس خودم امتحان کردن و جواب گرفتم. :5:
موفق باشید
بای
مرد مباح
13-04-2007, 12:40
ممنون دوست عزيز كه اين راهنمايي ها رو كردي.
خواهش میکنم قابلی نداشت اگه کمک دیگه ای خواستید در مورد کد و برنامه در خدمتم
بای
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.