چند سؤال فني در مورد دلفي؟؟؟؟

در اين بخش مي‌توانيد در مباحث مربوط ديگر زبانهاي برنامه نويسي به بحث بپردازيد

مدیران انجمن: Azadi.Isatis, abbas.m.k, athlon64x2, شوراي نظارت

Colonel I
Colonel I
پست: 643
تاریخ عضویت: سه‌شنبه ۱۹ تیر ۱۳۸۶, ۱:۰۸ ب.ظ
سپاس‌های ارسالی: 300 بار
سپاس‌های دریافتی: 1161 بار

پست توسط Frogfoot »

يه فرم ورود اطلاعات دارم كه فيلد ها رو با dbedit وارد جدول مي كنه.(اولين فيلد كه با dbedit1 پر مي شه كليده ) مي خوام وقتي دكمه save رو مي زنم اگه كليد به صورت تكراري وارد شد برنامه پيغام بده و cancel كنه.
وقتي از locate استفاده مي كنم چون dbedit مستقيم اطلاعات رو مي ريزه به جدول اين دستور فيلد جاري رو پيدا مي كنه و بر نامه هنگ مي كنه و پيام key violation مي ده.
چيكار كنم؟؟

فیلدی که کلید هست باید در دیتابیس بصورت Unique تعریف بشه؛ در این صورت، اگر کاربر مقدار تکراری برای آن وارد کند، در هنگام عمل Post با پیغام خطا مواجه میشه و Post انجام نمیشه. پس لازم نیست شما خودتون کد خاصی بنویسید، باید تعریف کلید در دیتابیس را تصحیح کنید.

وقتي از locate استفاده مي كنم چون dbedit مستقيم اطلاعات رو مي ريزه به جدول اين دستور فيلد جاري رو پيدا مي كنه و بر نامه هنگ مي كنه و پيام key violation مي ده.
چيكار كنم؟؟

Locate موجب تغییر مکان Cursor دیتاست میشه و برای این تغییر مکان در صورتی که رکورد جاری تغییر کرده باشه، سعی میشه که تغییرات ذخیره بشند، ما بخاطر وجود کلید تکراری، تغییرات ذخیره نمیشند و خطا می گیرید. در ضمن، Locate فقط روی داده های موجود در DataSet جستجو میکنه؛ اگر با Query تعداد رکورد از یک جدول را دریافت کرده باشید، جستجو فقط بر روی همان رکوردها انجام میشه، نه کل رکوردهای جدول.
New Member
پست: 6
تاریخ عضویت: شنبه ۲۴ شهریور ۱۳۸۶, ۲:۵۰ ق.ظ

پست توسط eelham »

سلام.
چه طور ميشه اطلاعات يك فيلد رو كه از نوع datetime مثل (01/07/1386)رو در سه combobox نشان داد. به طوري كه 1386 در combobox1 نشان داده شود و 7 در combobox2 و ....
(در ضمن من سعي كردم از دستورات sql استفاده كنم. مثل DAY(getdate()) اما نتونستم.)
مرسي.
Administrator
Administrator
نمایه کاربر
پست: 15899
تاریخ عضویت: جمعه ۷ بهمن ۱۳۸۴, ۷:۵۱ ب.ظ
سپاس‌های ارسالی: 72687 بار
سپاس‌های دریافتی: 31681 بار
تماس:

پست توسط Mahdi1944 »

eelham جان
اگر قرار هست انتخابي باشه، بايد هر کدوم در يک combobox باشند و بعد از انتخاب کاربر، شما نحوه‌ي ذخيره رو به نحو دلخواه انجام بديد، در ابتدا بايد به عنوان سه عدد مجزا که به در بازه‌هاي حاصي قابل قبول هستند نمايش داده بشه و بعد از انتخاب کاربر، به شکل يک يا چند فيلد در ديتابيس ذخيره بشه، در ضمن در اين فرض نيازي نيست که از نظر ديتابيس و سيستم به عنوان date&time محسوب بشه، فقط کافيه به شکلي ذخيره بشه که قابل بازيابي راحت باشه و شرايط مورد نياز براش تعريف شده باشه
زندگي صحنه يکتاي هنرمندي ماست هرکسي نغمه خود خواند و از صحنه رود
صحنه پيوسته به جاست خرم آن نغمه که مردم بسپارند به ياد


[External Link Removed for Guests] | [External Link Removed for Guests] | مجله الکترونيکي سنترال کلابز

[External Link Removed for Guests] | [External Link Removed for Guests] | [External Link Removed for Guests]

لطفا سوالات فني را فقط در خود انجمن مطرح بفرماييد، به اين سوالات در PM پاسخ داده نخواهد شد
Colonel I
Colonel I
پست: 643
تاریخ عضویت: سه‌شنبه ۱۹ تیر ۱۳۸۶, ۱:۰۸ ب.ظ
سپاس‌های ارسالی: 300 بار
سپاس‌های دریافتی: 1161 بار

پست توسط 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 باقی بمونه و تاریخ شمسی هم پشتیبانی کنه، باید از مبدل های تاریخ شمسی به میلادی و بالعکس استفاده کنید.
New Member
پست: 6
تاریخ عضویت: شنبه ۲۴ شهریور ۱۳۸۶, ۲:۵۰ ق.ظ

پست توسط eelham »

سلام.
مرسي از راهنمايي تون.
براي نمايش فيلد dattime در سه combobox اطلاعات اون رو به صورت يك رشته گرفتم و با استفاده از خاصيت string[i] (i=1…n ) تونستم در combobox نمايش بدم و مشكلم حل شد. در ضمن وقتي ار كد sql (datepart) كه راهنمايي كرديد استفاده كردم.در موقع active كردن query پيغام capability not supported ميده و كد sql رو قبول نمي كنه.
مرسي.
Colonel I
Colonel I
پست: 643
تاریخ عضویت: سه‌شنبه ۱۹ تیر ۱۳۸۶, ۱:۰۸ ب.ظ
سپاس‌های ارسالی: 300 بار
سپاس‌های دریافتی: 1161 بار

پست توسط Frogfoot »

در ضمن وقتي ار كد sql (datepart) كه راهنمايي كرديد استفاده كردم.در موقع active كردن query پيغام capability not supported ميده و كد sql رو قبول نمي كنه.
مرسي.

احتمالا یک جای کار را اشتباه کردید. DatePart از توابع T-SQL هست. برای کامپوننت های اتصال داده دلفی مثل ADO یا SDAC هم فرقی نمیکنه شما چه دستور SQL بنویسید؛ اینها کد SQL را مستقیما به SQL Server منتقل می کنند و از سرور جواب می گیرند.
اگر مراحل دقیق تر کاری که انجام دادید (دستور SQL ایی که نوشتید، کامپوننتی که استفاده کردید، و نوع فیلدی که در DatePart بکار بردید)، شاید بشه راحتتر مشکل را پیدا کرد.
New Member
پست: 3
تاریخ عضویت: سه‌شنبه ۲۵ دی ۱۳۸۶, ۷:۲۹ ق.ظ

چطوري مي ت.نم چند تا مقدار که با ',' concat شدند در دلفي 7 جدا کنم

پست توسط monaizadi29 »

Frogfoot نوشته شده:
يه فرم ورود اطلاعات دارم كه فيلد ها رو با dbedit وارد جدول مي كنه.(اولين فيلد كه با dbedit1 پر مي شه كليده ) مي خوام وقتي دكمه save رو مي زنم اگه كليد به صورت تكراري وارد شد برنامه پيغام بده و cancel كنه.
وقتي از locate استفاده مي كنم چون dbedit مستقيم اطلاعات رو مي ريزه به جدول اين دستور فيلد جاري رو پيدا مي كنه و بر نامه هنگ مي كنه و پيام key violation مي ده.
چيكار كنم؟؟

فیلدی که کلید هست باید در دیتابیس بصورت Unique تعریف بشه؛ در این صورت، اگر کاربر مقدار تکراری برای آن وارد کند، در هنگام عمل Post با پیغام خطا مواجه میشه و Post انجام نمیشه. پس لازم نیست شما خودتون کد خاصی بنویسید، باید تعریف کلید در دیتابیس را تصحیح کنید.

وقتي از locate استفاده مي كنم چون dbedit مستقيم اطلاعات رو مي ريزه به جدول اين دستور فيلد جاري رو پيدا مي كنه و بر نامه هنگ مي كنه و پيام key violation مي ده.
چيكار كنم؟؟

Locate موجب تغییر مکان Cursor دیتاست میشه و برای این تغییر مکان در صورتی که رکورد جاری تغییر کرده باشه، سعی میشه که تغییرات ذخیره بشند، ما بخاطر وجود کلید تکراری، تغییرات ذخیره نمیشند و خطا می گیرید. در ضمن، Locate فقط روی داده های موجود در DataSet جستجو میکنه؛ اگر با Query تعداد رکورد از یک جدول را دریافت کرده باشید، جستجو فقط بر روی همان رکوردها انجام میشه، نه کل رکوردهای جدول.
New Member
پست: 3
تاریخ عضویت: سه‌شنبه ۲۵ دی ۱۳۸۶, ۷:۲۹ ق.ظ

پست توسط monaizadi29 »

ممنون مي شم.
New Member
پست: 3
تاریخ عضویت: سه‌شنبه ۲۵ دی ۱۳۸۶, ۷:۲۹ ق.ظ

پست توسط monaizadi29 »

سلام
ميخواستم بدونم چطوري ميتونم چند تا مقدار رو که با ',' concat شدن جدا کنم.
Colonel I
Colonel I
پست: 643
تاریخ عضویت: سه‌شنبه ۱۹ تیر ۱۳۸۶, ۱:۰۸ ب.ظ
سپاس‌های ارسالی: 300 بار
سپاس‌های دریافتی: 1161 بار

پست توسط 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 اختصاص داده می شود.
New Member
پست: 1
تاریخ عضویت: دوشنبه ۲۰ اسفند ۱۳۸۶, ۱۰:۱۰ ق.ظ

پست توسط siavash1352 »

با سلام و خسته نباشید
فایلی از نوع Table دارم که با ویرایش آن با پیغام Key Violation مواجه می شوم و احیانأ دارای کلید مشابه می باشد .
لطفأ راهنمایی نمایید چگونه این کلید مشابه را پیدا نمایم و چگونه مشکل را بدون از دست دادن اطلاعات حل نمایم .

با تشکر
Colonel I
Colonel I
پست: 643
تاریخ عضویت: سه‌شنبه ۱۹ تیر ۱۳۸۶, ۱:۰۸ ب.ظ
سپاس‌های ارسالی: 300 بار
سپاس‌های دریافتی: 1161 بار

پست توسط Frogfoot »

فایل از نوع Table چی هست؟! منظورتون فایل بانک اطلاعاتی هست؟ چه نوع بانک اطلاعاتی هست؟ از چه طریقی به آن دسترسی پیدا می کنید؟
پیدا کردن کلید مشابه آسان هست، کلیدی که قصد اضافه کردن آن را دارید را در جدول جستجو کنید و ببینید چه رکوردی مقدار مشابه آن کلید را دارد.
شاید مشکل از نوع طراحی بانکتان و فیلدی که به عنوان فیلد کلید انتخاب کردید، باشد.
ارسال پست

بازگشت به “Other Programming”