سلام ببخشید آیا می شود بگویید که چطوری می توان یک برنامه دیتابیس را در ویندوزی دیگر اجرا کرد؟
من هنگام انجام این کار یک ارر دریافت کردم:Delphi DataBase Engine Error
Printable View
سلام ببخشید آیا می شود بگویید که چطوری می توان یک برنامه دیتابیس را در ویندوزی دیگر اجرا کرد؟
من هنگام انجام این کار یک ارر دریافت کردم:Delphi DataBase Engine Error
سلامنقل قول:
لطفا سوال خود را در يك جا مطرح كنيد.
هنگامی که برنامه دیتابیس ام را در ویندوز دیگری اجرا کردم با Delphi DataBase Engine Error روبرو شدم
آیا می توانید کمکم کنید؟
سلامنقل قول:
جواب سوالتون :
کد:http://forum.p30world.com/showthread.php?t=145133&page=2
توضحاتی کامل برای فیلترها (Filters)
چون دیدم ظاهرا این مسئله هنوز بین خیلی از دوستان مشکل هست این توضیحاتو نوشتم
به نظر من بهترین کار توضیح با مثالها هست بنابراین اینجا انواع مختلف رو مثال میزارم
نوع 1 : با مقادیر ثابت
نوع2 : با مقادیر متغییرکد:عددی : که در مثال 8 عدد ثابت هست
dataset.filter := 'YourNumberField = 8';
کاراکتری: که در آن کلمه MOBAH مقدار ثابت هست
dataset.filter := 'YourTextField = MOBAH';
تاریخ : که در آن 08/08/08 تاریخ خاص میباشد
Dataset.filter := 'YourDateField = 08/08/08';
در تمامی مثالهای زیر فرض بر این است که اطلاعات در یک Edit وارد شده و مقادیر آنها صحیح هست (یعنی برای مثال در فیلد عددی حرف وجود ندارد)
نوع 3 : بررسی جستجوییکد:عددی:
dataset.filter := 'YourNumberField = '+edit1.text;
کاراکتری :
dataset.filter := 'YourTextField = '''+edit1.text+'''';
تاریخ :
dataset.filter := 'YourDateField = '+edit1.text;
این نوع فقط برای انواع کاراکتری امکانپذیر هست
یعنی به فرض میخواهید به دنبال نامی بگردید که با حرف A ویا مقدار درون یک Edit شروع میشود
تمامی انواع فوق را میتوان با ترکیبهای And و OR با یکدیگر ترکیب کردکد:dataset.filetr := 'YourTextField = A*';
dataset.filter := 'YourTextField = '''+edit1.text+'''*';
برای مثال :
مثال بالا تمامی فیلدهایی که تاریخی کمتر از مقدار درون Edit2 دارند را به شرط اینکه با حروف اول Edit1 شروع شده اند را نمایش میدهد.کد:dataset.filter := 'YourTextField = '''+edit1.text+'''* and YourDateField < '+edit2.text;
سلام
دستتون درد نکنه هم برای آموزش هم برای بقیه پستها
کل 25 صفحه رو خوندم اما جوابم رو تو پست اخری پیدا کردم .ولی یه سوال مهم
هر کاری کردم نتونستم دوتا فیلد عددی رو با هم اند کنم مثل اند اخری که شما گذاشتین
مثلا توی اون اند بعد از دیت یه نامبر هم اضافه کنیم با یه ادیت دیگه؟؟؟
چه جوری میشه؟؟؟؟؟؟
سلام و تشكر. ميشه بگيد چجوري ميتونم يه تصوير توي بانك sql server ذخيره كنم؟
آره میتونس ولی کار متداولی نیست. نمیدونم چرا نتونیستی با دوتا عدد این کارو بکنی
این بحث چندین بار صورت گرفته و بهترین و کاملترین جواب رو جناب نان فوری در این مورد دادند.نقل قول:
با تشکر فراوان از نان فورس عزیز :
توصيه ميكنم فايلهاي صوتي و تصويري را توي بانك ذخيره نكنيد چون حجم بانك بالا ميره و مشكل سرعت و ... پيش مياد.
ولي در هر صورت :
اول دو روال براي ذخيره/خواندن اطلاعات بصورت Stream در/از يك فيلد از نوع Blob :
روال نوشتن :کد:var
OutStream : TMemoryStream;
روال خواندن :کد:ADOTable1.Edit;
ADOTable1.Insert;
TBlobField(ADOTable1.FieldByName('fldBlob')).LoadFromStream(OutStream);
ADOTable1.Post;
OutStream.Free;
خب حالا نحوه بازگذاري يك عكس و ذخيره اون در يك Stream براي ذخيره شدن در بانك :کد:ADOCommand1.CommandText := 'Select * from tblTest Where ...';
ADOTable1.Recordset := ADOCommand1.Execute;
OutStream := TMemoryStream.Create;
TBlobField(ADOTable1.FieldByName('fldBlob')).SaveToStream(OutStream);
OutStream.position:=0;
DecompressStream(OutStream);
OutStream.position:=0;
OutStream.Free;
اختصاص تصوير موجود در Image1 :کد:procedure WritePictureToStream(Picture: TPicture; Stream: TStream);
var
MStream: TMemoryStream;
iPictureSize: Integer;
begin
MStream := TMemoryStream.Create;
try
ReadWritePictureFromStream(Picture, MStream, False);
iPictureSize := MStream.Size;
Stream.WriteBuffer(iPictureSize, sizeof(iPictureSize));
Stream.WriteBuffer(MStream.Memory^, iPictureSize);
finally
MStream.Free;
end;
end;
procedure ReadPictureFromStream(Picture: TPicture; Stream: TStream);
var
MStream: TMemoryStream;
iPictureSize: Integer;
begin
MStream := TMemoryStream.Create;
try
Stream.ReadBuffer(iPictureSize, sizeof(iPictureSize));
MStream.SetSize(iPictureSize);
Stream.ReadBuffer(MStream.Memory^, iPictureSize);
ReadWritePictureFromStream(Picture, MStream, True);
finally
MStream.Free;
end;
end;
کد:WritePictureToStream(Image1.Picture , OutStream);
خواندن عكس از ديتابيس و اختصاص آن به يك TImage :
خواندن يك فايل صوتي و ذخيره آن در يك Stream و پخش از Stream :کد:ReadPictureFromStream(Image1.Picture, OutStream);
در Uses عبارت MMSystem را اضافه كنيد.
کد:OutStream := TMemoryStream.Create;
OutStream.LoadFromFile(FileName);
OutStream.Position := 0;
PlaySound(OutStream.Memory , 0,SND_MEMORY);
OutStream.Free;
خوب نمی دونم هر کاری کردم erorrداد
من می خوام دوتا عدد بگیره از دو تا ادیت بعد عددای بین اون دو تا رو نشون بده
چه جوری میشه؟؟؟؟؟؟؟؟؟؟؟؟؟
سلام مرد مباح عزیز. خسته نباشید.
من به حرف شما گوش کردم آدرس های امضای شما را نگاه کردم اما باز هم اشکالاتم رفع نشد.
مثلا فرض کنیم من یک edit دارم که شامل فیلد شماره عضویت است و می خواهم بعد از تایپ شماره مثلا در dbgrid رکوردها با این مشخصات نمایش داده شود. برای این کار این دستور ***** را باید چطور بنویسم و اصلا این دستور باید برای کدام کامپوننت نوشته شود؟؟؟؟؟؟؟؟؟؟؟؟؟؟
پست 245 رو دوباره و کامل بخون.
برای Table یا DataSet ویا ... میتونی از فیـلتر استفاده کنی.
شما فیلدهایی که طراحی کردین باید از جنس عددی باشه .نقل قول:
بعد طبق روندی که در بالا گفتم میتونی عمل کنی
سلام
با عرض شرمندگی باید بگم من پست 245 را خوندم اما هر کار کردم نتونستم اجرا کنم.
من برای رویداد FilterRecord جدولم کدهایی را که گفتید نوشتم مثلا
Table1.filter := 'NUM = '+edit1.text;
اما می خواهم بدونم در حالت اجرا بعد از تایپ، مثلا عدد 25 در edit1 چطور باید خروجی جستجو، نمایش داده شود؟ من می خواهم رکوردهای یافته شده با این فیلد را روی dbgrid ببینم. اما با نوشتن این کد برای table هیچ اتفاق خاصی نمی افتد !
شما باید خاصیت Filterd رو برار True قرار بدین.
اینو توی درسهای اولیه گفته بودم و فکر کردم مطالعه کردید.
موفق باشید
يك سوال داشتم !
اين درسهايي كه ( رد مباح ) زحمتشو كشيديد براي چه نوع ديتابيسه !
و يا اينكه فرقي نداره با هر نوع برنامه ديتابيسي هست و فرقي نداره !؟
فیلدها از نوع عددی هستن .
adotable1.filter:='code<strtoint(edit1.text) and code >strtoint(edit2.text)'dastoori ke neveshtam
خوب من اینو مینویسم ارور میده .البته موقع اجرا
میگه که مقدارایی که وارد میکنه نمیدونم تداخل داره ؟؟؟!!! یه چیزی تو این مایه ها
مرد مباح عزیز
من همه ی این ها را با دقت خوندم و خاصیت Filterd رو برای جدول True کردم اما باز جواب نمی گیرم.
خوب من چیکار کنم حالا ؟؟
این کد اشتباهه؟؟
درستش چه جوریه؟؟/کد:adotable1.filter :='masahat > 'strtoint(+edit10.text) and 'masahat <'strtoint(+edit11.text);
adotable1.Filtered:=true;
ایشون برای همه ی دیتا بیسها توضیحات لازم رو دادند (dbf , sql , access , ....).نقل قول:
البته واقعا دستشون درد نکنه:20:
دوست عزيز ممنونم !نقل قول:
ولي چون زياد آشنا نيستم !
اگر بشه دسته بندي بهتري داشته باشه و صفحات رو با مشخص كردن نوع ديتابيس بهم بگيد ممنونم ميشم تا ما هم از آموزش هاي دوست عزيزمون استفاده كنيم !
دوست عزیز.نقل قول:
این ّFilter که نوشتی اشتباه هست. شما باید بخشهای مختلف رو از هم جدا کنی
یعنی بخشهایی که از رو یک Edit خونده میشه رو باید بیرون علامت' قرار دهسد.
نتیجه :
ضمنا درتعریف ***** شما نباید از فرامین Strtoint استفاده کنی. بلکه کاملا بلعکس شما باید برای جنس String از یک تابع اشتفاده کنید و یا از روندی که در بالا توضیح داده شده بهره ببرید.کد:adotable1.filter := 'code <'+edit1.text+' and code >'+edit2.text;
دوست عزیز تمام این روندها برای تمامی انواع دیتابیسها کار میکنه و هیچ مشخصه جدا کننده ای وجود نداره که من بهتون بگم.نقل قول:
مرد مباح جون دستتون درد نکنه.خدا خیرتون بده .
:11::8:
دوست عزيز ممنونم !نقل قول:
فقط ميخوام بدونم براي شروع بايد با كدوم ديتابيس كار كرد !
و ديتابيس كامل با كارايي خوب چي هست !ۀ
دیتابیس کامل و خوب میشه Access ویا SQL. که بسته به نیاز باید انتخاب کنی.
ولی اگه میخوای تازه شروع کنی به لینک امضای من یک سری بزن.
واقعا ممنونم !
سلام مرد مباح عزيز
واقعا دستت درد نكنه ............خيللي خيلي خسته نباشي ......از روي تاريخ تاپيكها معلومه كه بيشتر از يك ساله كه داري به سوالها جواب ميدي!!!!!!!!!!به قول معروف دمت گرم!!
من تا حالا سوالي ننوشتم ولي جواب خيلي از سوالهام را از تاپيكهاي شما گرفتم........خير ببيني جووون!!!!!!!!
و الان دارم روي يه سيستم حقوق و دستمزد كار مي كنم سوالي كه من دارم اينه كه:
ميخواهم براي هر كدوم از افراد اضافه كارهايي را كه هر ماه انجام دادندرا ذخيره كنم.........براي اين كار بايد چكار كنم؟؟؟؟؟؟؟هر فرد يك جدول؟؟؟؟؟؟چه فيلدهاي داشته باشه؟؟؟لطفا اگه مي شه يه راهنمايي بكن
سلام
ببخشيد !!!!!!!! اگه مي شه در مورد دستور locate هم كمي توضيح بديد
ممنووووون
اولا به جمع دوستان این انجمتن خوش آمدید.
ثانیا جواب و توضیح مسائلی که گفتید :
1. شما باید یک Table برای مشخصات اولیه کارکنان داشته باشید نظیر نام و نام خانوادگی و ...
درصورتی که میخواین حتما اضافه کاریها در فیلد جدول جداگانه ذخیره بشه یک جدول با پارامترهای زیر کافیه:
کد پرسنلی که به جدول اول لینک باشه و ساعات کاری
ولی اگه بخواهید میتونی توی همون جدول مربوط به اطلاعات حقوق اونو تعریف کنید. برای این کار فیلدهای مورد نیاز به صورت زیر هست :
کد پرسنلی که به جدول اولیه لینک باشه و دو فیلد تاریخ که بازه حقوق را مشخص کنه و ساعات کاری عادی و ساعات کار اضافی
2. اوایل این تاپیک که مطالعه کردید اطلاعاتی درباره Locate هست. ولی اگه جوابتون رو نداده دقیقا بگید که چی میخواید تا براتون کامل در اون مورد توضیح بدم.
موفق باشی
ممنون كه وقت گذاشتين و جواب من را هم داديدويكي از مشكلاتم حل شد.
و اما توضيح بيشتر............
ببينيد اشكال من توي جستجو است .البته از خود شما ياد گرفتم كه براي جستجو روي فيلدهاي رشته اي از دستور ***** استفاده كنم...اين كار را كردم و جواب هم گرفتم ، اما مشكل من جستجو روي فيلدهايي از نوع ديگه است مثلا همين فيلدهاي تاريخ،يا فيلدهاي عددي....... من قبلا براي انها از دستور go to key استفاده مي كردم اما توي دلفي 7 روي اين تابع ازم خطا مي گيره و اون را نمي شناسه ،نميدوونم اين اشكال از دلفي منه يا ....گفتم شايد بشه به جاي go to key يه جورايي از locate استفاده كرد،اصلا ميشششه!!!!!!!!
كاري كه من ميخوام انجام بدم دقيقا اينه كه مي خوام بر اساس شماره پرسنلي كه از نوع عددي است يك ركورد را جستجو كنم و مقدار فيلدهاي اون را توي editها بريزم!!!!!اما نمي توونم:41:
در ضمن من همه اين تاپيك و دفترچه تلفن را هم خووندم اما جواب اين يكي را نگرفتم ..
ببخشيد طولاني شد خودتون گفتيد دقيقا!!!!
ممنون که کامل توضیح دادید
من فرمان مورد نظرتون رو مینویسم واگه درباره اون سوالی داشتید بپرسید :
کد:table1.locate('YourFieldName',strtoint(edit.text,[]);
دوباره سلام....من بازم اومدم
ببين مرد مباح من بعد از نوشتن اين خط كد بايد چه انتظاري ازش داشته باشم؟؟؟؟؟؟؟؟
من انتظار دارم كه بعد از نوشتن اين خط بره سر ركورد مورد نظر !!!آيا درسته يا نه؟؟؟؟؟؟؟
;([ ], (table1.locate('personalkey',strtoint(edit2.text
يعني با نوشتن خط زير ديگه نام همان ركورد كه دنبالش بوديم را توي اين ليبل بريزه ولي اينكا را نمي كنه و اسم اولين ركورد را در ليبل مي ريزه
;[' lb1.Caption:=adotable1.FieldValues ['fname
حالا چييييييييييييكار كنم؟؟؟؟؟؟؟؟؟؟؟
با سلام
سطر آخر (مقدار دهی به Label) را اینجوری بنویس :
کد:lb1.Caption := adoTable1fname.Value;
اگه Loctae رو توی Table ایتفاده میکنی توی همون هم باید بری سراغ اطلاعات.نقل قول:
این کد شما توی Table میگرده و توس ADOTable میخواد نشون بده که نمیشه.
نهههههههههههههه......دوتاش adotable1 اينجا اشتباه نوشتم..........ببخشيد.
فرمانی که نوشتی کاملا درسته و باید عمل بکنه.
نمیدونم مشکل از کجاست.
البته معمولا قبل از فرمان Locate از یک First استفاده میکننی که از اول دیتابیس جستجو بکنه.
سلام.... خسته نباشي
ان first هم گذاشتم اولش
اين دستورات روي فيلد name كه رشته اي است به خووبي جواب مي ده و مشكلي نداره ولي فكر كنم كه ان چون از نوع عددي است جواب نمي ده ولي همينشم خوووبه....حالا ديگه كاملا فهميدم locate چكار مي كنه...
الهي همانطور كه به ما كمك ميكني تا مشكلاتمون حل شه خدا همه مشكلاتت را حل كنه......
سلام من از بابت این تایپیک ممنونم
1. من متوجه ****** نمی شم تو درس 4 نوشتید table*****کنید
2. باز هم همون درس 4 ببینید اگه ما این کار رو کردیم و یه قسمت از جدول رو روی فرم نمایش دادیم چه جوری می تونیم به حالت اول برگردیم
در ضمن فرقی نداره data base چی باشه؟
توی پست 229 توضیح کامل درباره انواع فیلنـر وجود داره.
ضمنا فیلتـر یعنی اینکه یک مجموعه فیلد رو با یک پارامتر خاص انتخاب کنی و نمایش بدی.