ورود

View Full Version : سوال: يك مشكل عجيب در برنامه من پيش اومده . رفع اشكال كد



hentjanson
یک شنبه 02 تیر 1387, 17:47 عصر
به اين كد توجه كنيد يك checkbox كه بانك رو فيلتر ميكنه

و اونهايي كه فيلد vazeyat اونها برابر با (حروفچيني) هستش رو نشون ميده .

اين كد منه :
به نظرتون كجايه اين كد مشكل داره
اخه نتايج فيلتر نشون داده نميشه در بانك همچين ركورد هايي هست ولي هيچي رو نشون نميده


procedure TForm1.CheckBox1Click(Sender: TObject);
begin

if CheckBox1.Checked then
begin
adoTable1.Filtered:=False;
adoTable1.Filter := 'vazeyat='+QuotedStr('حروفچيني');
adoTable1.Filtered:=True;
end
else if not CheckBox1.Checked then
begin
adoTable1.Filtered:=False;
adoTable1.Filter := '';
end;
end;

dkhatibi
یک شنبه 02 تیر 1387, 18:56 عصر
احتمالا مشکل همون مشکل حرف ی هست.
فیلترهای به این شکل را با فیلد از نوع Bollean تعیین کنید بهتره!

nassim_20
یک شنبه 02 تیر 1387, 19:03 عصر
ممکن است مشکل از حرف "ی" باشه این حرف و حرف "ک" دو تا کد دارند
برای "ی" 236 و 237
و برای "ک" 152 و 223 است شما در اینجا کلمه "حروفچینی" رو با هردو "ی" امتحان کنید می تونید با این کد جایگزین کنید


str := 'حروفچینی';
while pos(char(236),str')>0 do
Memo1.Text := StuffString(str, pos(char(236),Memo1.Text), 1, char(237));

که البته باجابه جایی ارقام نتیجه مورد نظر رو بدست میاورید

hentjanson
یک شنبه 02 تیر 1387, 19:17 عصر
ميشه روند كامل اين كد رو بگيد كامل به دنباله اين كد شما چي بنوسم اخه متوجه نشدم

SYNDROME
یک شنبه 02 تیر 1387, 19:45 عصر
ميشه روند كامل اين كد رو بگيد كامل به دنباله اين كد شما چي بنوسم اخه متوجه نشدم
این لینک را نگاه کن
http://barnamenevis.org/forum/showthread.php?t=71262
در زمان ورود اطلاعات کاراکترهای فوق را اصلاح می کند.
موفق باشید

nassim_20
یک شنبه 02 تیر 1387, 19:51 عصر
ببینید ما دو تا "ی" داریم یکی ساده و یکی دو نقطه زیرش داره "ي"
این کد فقط میاد توی متن str "ي" را به "ی" تبدیل میکنه


str := 'حروفچینی';
while pos(char(237),str')>0 do
Memo1.Text := StuffString(str, pos(char(237),Memo1.Text), 1, char(236));

حالا برای فیلتر کردن از str استفاده کنید

adoTable1.Filter := 'vazeyat='+QuotedStr(str);

hentjanson
یک شنبه 02 تیر 1387, 20:12 عصر
سلام من از اين كد استفاده كردم ولي باز م مشكلم حل نشد


procedure TMaster.MyEdit2KeyPress(Sender: TObject; var Key: Char);
begin
IF Key = #223 then Key := #152;
IF Key = #236 then Key := #237;
end;

دوستان روش بهتر به نظرشون ميرسه

SYNDROME
دوشنبه 03 تیر 1387, 07:12 صبح
سلام من از اين كد استفاده كردم ولي باز م مشكلم حل نشد


procedure TMaster.MyEdit2KeyPress(Sender: TObject; var Key: Char);
begin
IF Key = #223 then Key := #152;
IF Key = #236 then Key := #237;
end;

دوستان روش بهتر به نظرشون ميرسه
الان شما کاراکترها را استاندارد می کنید.
فقط KerPreview فرمتان را True کرده اید؟
چک کنید ببنید موقعی که کلیدی می زنید کد فوق عملی انجام می دهد.
ولی به این نکته دقت کنید که اسامی داخل بانک استاندارد نیست.
حالا یک فرم درست کنید و همین کد را در آن قرار دهید و KeyPreview فرمتان را هم True کنید و داده ها را دوباره داخل بانک وارد کنید تا آنها هم اصلاح شوند.
موفق باشید

hentjanson
دوشنبه 03 تیر 1387, 12:19 عصر
اين طور كه غير عاديه نميشه از همان اول درست ثبت كنه . مقادبر رو

SYNDROME
دوشنبه 03 تیر 1387, 21:03 عصر
اين طور كه غير عاديه نميشه از همان اول درست ثبت كنه . مقادبر رو
منظورتان واضح نیست.
کمی توضیح دهید.
یک روش دیگر هم است که اطلاعات بانک را کاراکتر به کاراکتر اصلاح کنید.
موفق باشید

hentjanson
دوشنبه 03 تیر 1387, 22:47 عصر
با accept ميشه اين كار رو كرد ؟
اين روش شما چيه ميشه در موردش صحبت كنيد

SYNDROME
سه شنبه 04 تیر 1387, 06:37 صبح
با accept ميشه اين كار رو كرد ؟
اين روش شما چيه ميشه در موردش صحبت كنيد
روش اول که در موردش صحبت کردی برای زمانی است که شما با زدن هر کلید از صفحه کلیدتان کد فوق در صورت نیاز اصلاح می شود.
الان که شما با انجام تغییرات فوق شروع به تایپ داده می کنید کدهای ورودی شما استاندارد است ولی اطلاعاتی که از قبل در بانک ذخیره کرده اید استاندارد نمی باشد.
حالا یا باید اطلاعات کل بانکتان را از اول وارد کنید و یا اطلاعات بانکتان را با نوشتن یک کد که اطلاعات را بازیابی کند و بعد از اصلاح کاراکترها آن را در بانک ذخیره کند.
من توصیه می کند چندتا از رکوردهای بانکتان را از اول وارد کنید و اگر جستجوهای شما بر روی چند رکورد ورودی جواب داد آن وقت به سراغ اصلاح داده های داخل بانک بروید.
موفق باشید

hentjanson
سه شنبه 04 تیر 1387, 07:05 صبح
من بانك رو خالي كردم وقتي دوباره شورع به ثبت مي كنم بازم نميشه
يعني چيزي نشون نميده

AFTABGARDAN2006
سه شنبه 04 تیر 1387, 09:09 صبح
بانک اگر تحت SQL Server باشه Collation رو باید عوض کنید

SYNDROME
سه شنبه 04 تیر 1387, 21:48 عصر
من بانك رو خالي كردم وقتي دوباره شورع به ثبت مي كنم بازم نميشه
يعني چيزي نشون نميده
آیا کلماتی که حرف "ی" و "گ" را هم ندارند جستجو می کنید این مشکل را دارید و یا مشخص زمان جستجوی حروف فوق است؟
موفق باشید

اصغر (پآچ)
سه شنبه 04 تیر 1387, 22:41 عصر
به اين كد توجه كنيد يك checkbox كه بانك رو فيلتر ميكنه

و اونهايي كه فيلد vazeyat اونها برابر با (حروفچيني) هستش رو نشون ميده .

اين كد منه :
به نظرتون كجايه اين كد مشكل داره
اخه نتايج فيلتر نشون داده نميشه در بانك همچين ركورد هايي هست ولي هيچي رو نشون نميده


procedure TForm1.CheckBox1Click(Sender: TObject);
begin

if CheckBox1.Checked then
begin
adoTable1.Filtered:=False;
adoTable1.Filter := 'vazeyat='+QuotedStr('حروفچيني');
adoTable1.Filtered:=True;
end
else if not CheckBox1.Checked then
begin
adoTable1.Filtered:=False;
adoTable1.Filter := '';
end;
end;


سلام دوست من

ببین این کدی که نوشتی وقتی از دستور
if .... then
else
استفاده می کنی دیگه نیازی نداره که اون شرط رو دوباره چک کنی خود دستور Else وقتی اون شرطت درست نباشه اجرا میشه پس اون خطی که قرمز کردم عملاً اضافی است.

ثانیاً تو چرا گیر دادی به فیلتر کردن بانک با Acept مگه کوئری چشه که همش میخوای بانک هاتو با Acept فیلتر کنی اگه از کوئری استفاده کنی فکر کنم راحت تر باشی. بهتره همه روشهای فیلتر کردن بانک ها رو تجربه کنی اما راحت ترین رو همیشه استفاده کن (این نظر منه)

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

hentjanson
چهارشنبه 05 تیر 1387, 10:00 صبح
دوست من .
من از accept اينجا استفاده نكردم ! مشكل اينجاست اطلاعات ثبت ميشن ولي نشون داده نميشن

AFTABGARDAN2006
چهارشنبه 05 تیر 1387, 10:35 صبح
شما باید یکبار اون جدول را ببندی و باز کنی مثلاً
adoTable1.close;
adoTable1.Open;

AFTABGARDAN2006
چهارشنبه 05 تیر 1387, 10:36 صبح
تا زمانی که بانک بسته نشود اطلاعات شما Refresh نمی شود(البته آخرین رکورد فقط ذخیره نمی شود)

hentjanson
چهارشنبه 05 تیر 1387, 17:03 عصر
مشكل هنوز پا برجاست دوستان وقت كردن يك توجهي بكنند

SYNDROME
چهارشنبه 05 تیر 1387, 20:41 عصر
دوست من .
مشكل اينجاست اطلاعات ثبت ميشن ولي نشون داده نميشن
منظورتان این است که اصلاً نشون نمی ده و یا موقع جستجو نمایش نمی دهد؟
اگر در زمان جستجو نمایش نمی دهد فقط مشکلتان روی یک سری حروف خاص است و یا روی هر حرفی مشکل وجود دارد.
موفق باشید

hentjanson
پنج شنبه 06 تیر 1387, 13:02 عصر
روي حروف خاص اگه همين رو به جاي حروف چيني بنوسيم سبز كار ميكنه

SYNDROME
جمعه 07 تیر 1387, 07:18 صبح
روي حروف خاص اگه همين رو به جاي حروف چيني بنوسيم سبز كار ميكنه
منظورتان را وضح بیان کنید.
اصلاً متوجه منظور شما نشدم.
موفق باشید

hentjanson
جمعه 07 تیر 1387, 17:08 عصر
يك نمونه برنامه ميزارم براي مشاهده تا شب .
اينطوري متوجه مشكل من ميشويد