سؤال

لدي دلفي شكل مع بعض DB الضوابط على ذلك.

تمثل تاريخ يمكنني استخدام TJvDBDatePickerEdit (من JCL) ، والتي لديها خاصية جميلة

ShowCheckBox := True;

السماح للمستخدم بإدخال أنه لا يوجد تاريخ معروف (DBNull).

أنا التحقق من ذلك nulling في منتقي التاريخ يعمل كما هو متوقع من قبل:

procedure Tframe.adoQueryBeforePost(DataSet: TDataSet);
begin
  if (qryAuftraege.FieldByName('MyDateField').IsNull) then
  begin
    ShowMessage('IsNull!');
  end;
end;

الرسالة يظهر مربع.وبالتالي فإن المجال أن اللغط عنصر يجب أن تكتب هي من نوع varNull.

الآن هناك خط الأنابيب هذا:

TADOQuery -> TADOConnection -> MS OLE DB Provider for ODBC Drivers -> MySQL ODBC 5.1 Driver

و MySQL ODBC يظهر الآن في السجل:

UPDATE `db`.`table` SET `MyDateField`=_latin1'0004-00-00' WHERE `ID`=5 AND `MyDateField`=_latin1'2009-06-17';

حسنا التاريخ تخزين '0004-00-00' (الذي الخلية يبدو أن توفير مثل هذا).الآن عند الاستعلام عن دخول يتم التعرف على أنها فارغة من قبل دلفي, ولكن عندما يكون تحديث في المرة القادمة ، داعيا:

UPDATE `bvl`.`auftraege` SET `MyDateField`=_latin1'2009-06-17' WHERE `ID`=5 AND `MyDateField` IS NULL;

بالطبع فشل لأن MyDateField ليست فارغة (على الأقل في MySQL DB).

أين هذه السلسلة '0004-00-00' تأتي من ؟ إذا كان الخلل في مكان ما حيث يمكن اعتراض ؟

أعرف مسبقا أن هناك مكونات لشراء المباشر في الخلية الاتصالات التي (أفترض) لا تظهر هذا السلوك.

هل كانت مفيدة؟

المحلول

تأكد من التحقق من الخلية الخاصة بك الخيارات كما ناقش هنا...

ثم سأحاول مع مجموعة مختلفة من مكونات اتصال كما المكدس (ADO + ODBC 5.1 سائق) قد المشكلة هنا.
هل حاولت مع آخر ODBC السائق ؟ أو مع DBX...

نصائح أخرى

لحفظ الوقت / التاريخ فارغة إلى سجل قاعدة البيانات، مجرد دعوة

qryAuftraege.FieldByName('MyDateField').clear;

وأنا لا أعرف الآثار المترتبة على القيام بذلك، ولكن لقد استعملت دائما

qryAuftraege.FieldByName('MyDateField').AsString:='';
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top