دلفي - حفظ التاريخ والوقت فارغة إلى DB (ADO / MySQL)
سؤال
لدي دلفي شكل مع بعض 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:='';