صفحه 2 از 3
ارسال شده: جمعه ۱۱ آبان ۱۳۸۶, ۳:۴۳ ق.ظ
توسط Frogfoot
يه فرم ورود اطلاعات دارم كه فيلد ها رو با dbedit وارد جدول مي كنه.(اولين فيلد كه با dbedit1 پر مي شه كليده ) مي خوام وقتي دكمه save رو مي زنم اگه كليد به صورت تكراري وارد شد برنامه پيغام بده و cancel كنه.
وقتي از locate استفاده مي كنم چون dbedit مستقيم اطلاعات رو مي ريزه به جدول اين دستور فيلد جاري رو پيدا مي كنه و بر نامه هنگ مي كنه و پيام key violation مي ده.
چيكار كنم؟؟
فیلدی که کلید هست باید در دیتابیس بصورت Unique تعریف بشه؛ در این صورت، اگر کاربر مقدار تکراری برای آن وارد کند، در هنگام عمل Post با پیغام خطا مواجه میشه و Post انجام نمیشه. پس لازم نیست شما خودتون کد خاصی بنویسید، باید تعریف کلید در دیتابیس را تصحیح کنید.
وقتي از locate استفاده مي كنم چون dbedit مستقيم اطلاعات رو مي ريزه به جدول اين دستور فيلد جاري رو پيدا مي كنه و بر نامه هنگ مي كنه و پيام key violation مي ده.
چيكار كنم؟؟
Locate موجب تغییر مکان Cursor دیتاست میشه و برای این تغییر مکان در صورتی که رکورد جاری تغییر کرده باشه، سعی میشه که تغییرات ذخیره بشند، ما بخاطر وجود کلید تکراری، تغییرات ذخیره نمیشند و خطا می گیرید. در ضمن، Locate فقط روی داده های موجود در DataSet جستجو میکنه؛ اگر با Query تعداد رکورد از یک جدول را دریافت کرده باشید، جستجو فقط بر روی همان رکوردها انجام میشه، نه کل رکوردهای جدول.
ارسال شده: یکشنبه ۲۷ آبان ۱۳۸۶, ۲:۵۵ ق.ظ
توسط eelham
سلام.
چه طور ميشه اطلاعات يك فيلد رو كه از نوع datetime مثل (01/07/1386)رو در سه combobox نشان داد. به طوري كه 1386 در combobox1 نشان داده شود و 7 در combobox2 و ....
(در ضمن من سعي كردم از دستورات sql استفاده كنم. مثل DAY(getdate()) اما نتونستم.)
مرسي.
ارسال شده: یکشنبه ۲۷ آبان ۱۳۸۶, ۳:۱۸ ق.ظ
توسط Mahdi1944
eelham جان
اگر قرار هست انتخابي باشه، بايد هر کدوم در يک combobox باشند و بعد از انتخاب کاربر، شما نحوهي ذخيره رو به نحو دلخواه انجام بديد، در ابتدا بايد به عنوان سه عدد مجزا که به در بازههاي حاصي قابل قبول هستند نمايش داده بشه و بعد از انتخاب کاربر، به شکل يک يا چند فيلد در ديتابيس ذخيره بشه، در ضمن در اين فرض نيازي نيست که از نظر ديتابيس و سيستم به عنوان date&time محسوب بشه، فقط کافيه به شکلي ذخيره بشه که قابل بازيابي راحت باشه و شرايط مورد نياز براش تعريف شده باشه
ارسال شده: دوشنبه ۲۸ آبان ۱۳۸۶, ۱۲:۰۸ ق.ظ
توسط Frogfoot
در ضمن من سعي كردم از دستورات sql استفاده كنم. مثل DAY(getdate()) اما نتونستم.
اگر فرض بگیریم که جدول شما MyTable و فیلد شما MyField (از نوع datetime) باشه:
Please Login or Register to see this codeچه طور ميشه اطلاعات يك فيلد رو كه از نوع datetime مثل (01/07/1386)رو در سه combobox نشان داد.
با استفاده از تابع DecodeDate در دلفی می تونید اجزای یک تاریخ خاص (مثل سال،ماه، روز) را بصورت مجزا دریافت کنید. البته نوع datetime موجود در SQL Server و TDateTime موجود در دلفی مخصوص تاریخ میلادی هستند و نمیشه از آنها برای تاریخ شمسی استفاده کرد. اگر بخواید نوع فیلدتون همچنان DateTime باقی بمونه و تاریخ شمسی هم پشتیبانی کنه، باید از مبدل های تاریخ شمسی به میلادی و بالعکس استفاده کنید.
ارسال شده: شنبه ۳ آذر ۱۳۸۶, ۲:۳۰ ق.ظ
توسط eelham
سلام.
مرسي از راهنمايي تون.
براي نمايش فيلد dattime در سه combobox اطلاعات اون رو به صورت يك رشته گرفتم و با استفاده از خاصيت string[i] (i=1…n ) تونستم در combobox نمايش بدم و مشكلم حل شد. در ضمن وقتي ار كد sql (datepart) كه راهنمايي كرديد استفاده كردم.در موقع active كردن query پيغام capability not supported ميده و كد sql رو قبول نمي كنه.
مرسي.
ارسال شده: شنبه ۳ آذر ۱۳۸۶, ۱۱:۴۰ ق.ظ
توسط Frogfoot
در ضمن وقتي ار كد sql (datepart) كه راهنمايي كرديد استفاده كردم.در موقع active كردن query پيغام capability not supported ميده و كد sql رو قبول نمي كنه.
مرسي.
احتمالا یک جای کار را اشتباه کردید. DatePart از توابع T-SQL هست. برای کامپوننت های اتصال داده دلفی مثل ADO یا SDAC هم فرقی نمیکنه شما چه دستور SQL بنویسید؛ اینها کد SQL را مستقیما به SQL Server منتقل می کنند و از سرور جواب می گیرند.
اگر مراحل دقیق تر کاری که انجام دادید (دستور SQL ایی که نوشتید، کامپوننتی که استفاده کردید، و نوع فیلدی که در DatePart بکار بردید)، شاید بشه راحتتر مشکل را پیدا کرد.
چطوري مي ت.نم چند تا مقدار که با ',' concat شدند در دلفي 7 جدا کنم
ارسال شده: سهشنبه ۲۵ دی ۱۳۸۶, ۷:۳۵ ق.ظ
توسط monaizadi29
Frogfoot نوشته شده:يه فرم ورود اطلاعات دارم كه فيلد ها رو با dbedit وارد جدول مي كنه.(اولين فيلد كه با dbedit1 پر مي شه كليده ) مي خوام وقتي دكمه save رو مي زنم اگه كليد به صورت تكراري وارد شد برنامه پيغام بده و cancel كنه.
وقتي از locate استفاده مي كنم چون dbedit مستقيم اطلاعات رو مي ريزه به جدول اين دستور فيلد جاري رو پيدا مي كنه و بر نامه هنگ مي كنه و پيام key violation مي ده.
چيكار كنم؟؟
فیلدی که کلید هست باید در دیتابیس بصورت Unique تعریف بشه؛ در این صورت، اگر کاربر مقدار تکراری برای آن وارد کند، در هنگام عمل Post با پیغام خطا مواجه میشه و Post انجام نمیشه. پس لازم نیست شما خودتون کد خاصی بنویسید، باید تعریف کلید در دیتابیس را تصحیح کنید.
وقتي از locate استفاده مي كنم چون dbedit مستقيم اطلاعات رو مي ريزه به جدول اين دستور فيلد جاري رو پيدا مي كنه و بر نامه هنگ مي كنه و پيام key violation مي ده.
چيكار كنم؟؟
Locate موجب تغییر مکان Cursor دیتاست میشه و برای این تغییر مکان در صورتی که رکورد جاری تغییر کرده باشه، سعی میشه که تغییرات ذخیره بشند، ما بخاطر وجود کلید تکراری، تغییرات ذخیره نمیشند و خطا می گیرید. در ضمن، Locate فقط روی داده های موجود در DataSet جستجو میکنه؛ اگر با Query تعداد رکورد از یک جدول را دریافت کرده باشید، جستجو فقط بر روی همان رکوردها انجام میشه، نه کل رکوردهای جدول.
ارسال شده: سهشنبه ۲۵ دی ۱۳۸۶, ۷:۳۹ ق.ظ
توسط monaizadi29
ممنون مي شم.
ارسال شده: سهشنبه ۲۵ دی ۱۳۸۶, ۷:۴۸ ق.ظ
توسط monaizadi29
سلام
ميخواستم بدونم چطوري ميتونم چند تا مقدار رو که با ',' concat شدن جدا کنم.
ارسال شده: سهشنبه ۲۵ دی ۱۳۸۶, ۵:۲۵ ب.ظ
توسط Frogfoot
من متوجه منظور شما نشدم، یه پست زدید توش فقط یک نقل قول از من هست، در پست بعدی تشکر کردید، بعد از اون سوال پرسید!
در هر حال...
ميخواستم بدونم چطوري ميتونم چند تا مقدار رو که با ',' concat شدن جدا کنم.
می تونید با تابع PosEx از یونیت StrUtils هر کدام از کاما (,) ها را پیدا کنید و رشته ها را جدا کنید. یا می تونید از TStringList استفاده کنید. خصوصیت Delimiter آن را بر روی کاما تنظیم کنید و متن مورد نظر خودتون رو به DelimitedText اختصاص بدید. TStringList بصورت خودکار تمام رشته ها را بر اساس کاما جدا میکنه و بصورت مجزا در Items قرار میده:
Please Login or Register to see this codeدر مثال بالا یک رشته فرضی که با کاما جدا شده به یک نمونه از کلاس TStringList داده میشه و این کلاس عمل جداسازی را انجام میده و نتیجه را در یک Memo نمایش میده.
برای دسترسی به هر یک از رشته های جدا شده می تونید از Items استفاده کنید، مثلا:
Please Login or Register to see this code
در مثال فوق هر یک از رشته های جداشده S خوانده می شود و به متغیر فرضی MyStr اختصاص داده می شود.
ارسال شده: یکشنبه ۱۶ تیر ۱۳۸۷, ۹:۴۰ ق.ظ
توسط siavash1352
با سلام و خسته نباشید
فایلی از نوع Table دارم که با ویرایش آن با پیغام Key Violation مواجه می شوم و احیانأ دارای کلید مشابه می باشد .
لطفأ راهنمایی نمایید چگونه این کلید مشابه را پیدا نمایم و چگونه مشکل را بدون از دست دادن اطلاعات حل نمایم .
با تشکر
ارسال شده: یکشنبه ۱۶ تیر ۱۳۸۷, ۸:۵۲ ب.ظ
توسط Frogfoot
فایل از نوع Table چی هست؟! منظورتون فایل بانک اطلاعاتی هست؟ چه نوع بانک اطلاعاتی هست؟ از چه طریقی به آن دسترسی پیدا می کنید؟
پیدا کردن کلید مشابه آسان هست، کلیدی که قصد اضافه کردن آن را دارید را در جدول جستجو کنید و ببینید چه رکوردی مقدار مشابه آن کلید را دارد.
شاید مشکل از نوع طراحی بانکتان و فیلدی که به عنوان فیلد کلید انتخاب کردید، باشد.