ცხოვრება

თარიღის დროითი მნიშვნელობების ფორმატირება შესასვლელი SQL დელფში

თარიღის დროითი მნიშვნელობების ფორმატირება შესასვლელი SQL დელფში

ოდესმე მიიღეთ საშინელი "პარამეტრის ობიექტი არასწორად არის განსაზღვრული. მოწოდებული იქნა შეუსაბამობა ან არასრული ინფორმაცია"JET შეცდომა? აქ მოცემულია სიტუაციის გამოსწორება.

როდესაც თქვენ გჭირდებათ SQL შეკითხვის შექმნა წვდომის მონაცემთა ბაზის საწინააღმდეგოდ, სადაც გამოყენებულია თარიღი (ან თარიღის დრო) მნიშვნელობა, თქვენ უნდა დარწმუნდეთ, რომ გამოყენებულია სწორი ფორმატის ფორმატირება.

მაგალითად, SQL შეკითხვისას: "SELECT * FROM TBL WHITE DateField = '10 / 12/2008" "გსურთ მიიღოთ ყველა ჩანაწერი ცხრილიდან, სახელწოდებით TBL, სადაც ზოგადი თარიღის ველი DateField ტოლია 10/12/2008.

ზემოთ ხაზი ნათელია? ეს არის დეკემბერი, 10 ან ოქტომბერი, 12? საბედნიეროდ, ჩვენ დარწმუნებული ვართ, რომ შეკითხვის წელში არის 2008 წელი.

შეკითხვის თარიღის ნაწილი უნდა იყოს მითითებული MM / DD / YYYY ან DD / MM / YYYY ან იქნებ YYYYMMDD? და აქ როლი თამაშობს რეგიონულ პარამეტრებს?

MS Access, Jet, Date Formatting

წვდომისა და JET (dbGo - ADO Delphi კონტროლის) გამოყენებისას SQL ფორმატის ფორმატირება თარიღის ველი უნდა * ყოველთვის * იყოს:

# YYYY-MM-DD #

ნებისმიერი რამ შეიძლება მუშაობდეს შეზღუდულ ტესტირებაში, მაგრამ ხშირად შეიძლება გამოიწვიოს მომხმარებლის აპარატზე მოულოდნელი შედეგები ან შეცდომები.

აქ არის დელფის საკუთარი ფუნქცია, რომლის გამოყენებაც შეგიძლიათ გამოიყენოთ თარიღის მნიშვნელობის ფორმატის შესასვლელად Access SQL მოთხოვნაზე.

ფუნქცია DateForSQL (შეკრა თარიღი: TDate): სიმებიანი;

var

y, m, d: სიტყვა;

დაიწყოს

DecodeDate (თარიღი, y, m, d);

შედეგი: = ფორმატი ('#%. * d -%. * d -%. * d #', 4, y, 2, m, 2, d);

დასასრული;

"1973 წლის 29 იანვრისთვის" ფუნქცია დააბრუნებს სტრიქონს "# 1973-01-29 #".

შესვლა SQL თარიღის დროის ფორმატში?

რაც შეეხება თარიღის და დროის ფორმატირებას, ზოგადი ფორმატია:

# yyy-mm-dd HH: MM: SS #

ეს არის: # წელი-თვე-დღე SPACE საათი: წუთი: მეორე #

როგორც კი SQL– ს მოქმედი ვადის დროის სტრიქონი მოაწყობთ ზემოთ ჩამოთვლილი ზოგადი ფორმატის გამოყენებით და სცადეთ ის დელფის მონაცემთა ნებისმიერი კომპონენტის გამოყენებით, როგორც TADOQuery, მიიღებთ საშინელ "პარამეტრის ობიექტი არასწორად არის განსაზღვრული. არ იქნა მიწოდებული შეუსაბამობა ან არასრული ინფორმაცია" შეცდომა გაშვების დროს!

ზემოთ მოცემულ ფორმატში პრობლემაა ":" სიმბოლოში - როგორც ეს გამოიყენება პარამეტრიზებული დელფის შეკითხვის პარამეტრებისათვის. როგორც "... სად არის DateField =: dateValue" - აქ "dateValue" არის პარამეტრი და ":" გამოიყენება მის აღსანიშნავად.

შეცდომის „გამოსწორების“ ერთი გზაა გამოიყენოთ სხვა ფორმატის თარიღი / დრო (შეცვალოს „:„ ერთად “.):

# yyy-mm-dd HH.MM.SS #

და აქ არის დელფის პერსონალური ფუნქცია სტრიქონის დასაბრუნებლად თარიღის დროის მნიშვნელობისა, რომელიც შეგიძლიათ გამოიყენოთ SQL– ით მოთხოვნების შექმნისას Access– ზე, სადაც უნდა მოძებნოთ თარიღის მნიშვნელობა:

ფუნქცია DateTimeForSQL (შეკრა dateTime: TDateTime): სიმებიანი;

var

y, m, d: სიტყვა;

საათი, წთ, წამი, msec: სიტყვა;

დაიწყოს

DecodeDate (dateTime, y, m, d);

DecodeTime (dateTime, საათი, წუთი, წამი, msec);

შედეგი: = ფორმატი ('#%. * დ -%. * დ -%. * დ%. * დ.%. * დ.%. * დ #', 4, y, 2, მ, 2, დ, 2 , საათი, 2, წთ, 2, წამი);

დასასრული;

ფორმატი უცნაურია, მაგრამ გამოიწვევს სწორად ფორმატიზებული თარიღის დროის სიმებიანი მნიშვნელობის გამოყენებას SQL მოთხოვნებში!

აქ არის უფრო მოკლე ვერსია, რომელიც იყენებს FormatDateTime რუტინას:

ფუნქცია DateTimeForSQL (შეკრა dateTime: TDateTime): სიმებიანი;

დაიწყოს

შედეგი: = FormatDateTime ('# yyyy-mm-dd hh.nn.ss #', dateTime);

დასასრული;