PDA

View Full Version : مقایسه تاریخ در sql



Hossein Bazyan
سه شنبه 14 خرداد 1387, 15:22 عصر
سلام
من برنامه ای نوشته ام که در یکی از فرمها بر اساس یک مقایسه اطلاعات در گرید نمایش داده میشه
کد sql ان :

'sSql = "SELECT * FROM Facturregels WHERE CDate(FacturDatum) <=#" & Vandaag & "# AND Gefacturerd=false "

مدتیه که این کد کار نمیکنه و شرط تاریخ رو برنمگیردونه در حالیکه قبلا خوب کار میکرد ! . نمیدانم در تنظیمات وی بی دست بردم ( که بردم اگه از اون باشه ) یا مشکل دیگری هست .
در مثال فوق شرط تاریخ کنترل نمیشه و همه فیلدها رو برمیگردونه در حالیکه باید فلدهایی که کمتر یا مساوی با Vandaag نمایش داده شود.
دوستان باز هم میگم قبلا کار میکرد ( منظورم اینه که از CDate و اینا نمیتونه باشه )

linux
سه شنبه 14 خرداد 1387, 16:28 عصر
سلام
من برنامه ای نوشته ام که در یکی از فرمها بر اساس یک مقایسه اطلاعات در گرید نمایش داده میشه
کد sql ان :

'sSql = "SELECT * FROM Facturregels WHERE CDate(FacturDatum) <=#" & Vandaag & "# AND Gefacturerd=false "

مدتیه که این کد کار نمیکنه و شرط تاریخ رو برنمگیردونه در حالیکه قبلا خوب کار میکرد ! . نمیدانم در تنظیمات وی بی دست بردم ( که بردم اگه از اون باشه ) یا مشکل دیگری هست .
در مثال فوق شرط تاریخ کنترل نمیشه و همه فیلدها رو برمیگردونه در حالیکه باید فلدهایی که کمتر یا مساوی با Vandaag نمایش داده شود.
دوستان باز هم میگم قبلا کار میکرد ( منظورم اینه که از CDate و اینا نمیتونه باشه )
این دستور sql? یا ویبی؟ اگر sql هست این cdate یعنی چی؟
برای sql این دستور را باید بنویسی


SELECT * FROM Tabale
WHERE myDate='2008/01/01'

علامت # برای مشخص کردن تاریخ در ویبی هست
دستور را اینجوری اصلاح کن


sSql = "SELECT * FROM Facturregels WHERE FacturDatum <= '" & Cdate(Vandaag) & "' AND Gefacturerd=false "

Hossein Bazyan
سه شنبه 14 خرداد 1387, 17:33 عصر
این دستور sql? یا ویبی؟ اگر sql هست این cdate یعنی چی؟
برای sql این دستور را باید بنویسی


SELECT * FROM Tabale
WHERE myDate='2008/01/01'

علامت # برای مشخص کردن تاریخ در ویبی هست
دستور را اینجوری اصلاح کن


sSql = "SELECT * FROM Facturregels WHERE FacturDatum <= '" & Cdate(Vandaag) & "' AND Gefacturerd=false "


سلام
مرسی دوست عزیز. درسته دستور sql میباشد اما من در وی بی میخوام اجرا کنم .
اما دستور cdate . من بنا به دلایلی نوع فیلد رو رشته گرفته ام و برای مقایسه باید تبدیل به تاریخ بشه این دستور هم فیلد رو برای مقایسه به تاریخ تبدیل میکنه .
از علامتهای ' ' هم استفاده کردم اما جواب نمیده . میگم قبلا جواب میداد. البته خودم به نتایجی رسیده ام که نمیدانم درسته یا خیر .
من تاریخ رو به شکل ( سال - ماه - روز) در بانک خیره کرده ام - در هلند از این روش استفاده میشه اما در اجرای گام به گام به گام مقداری که به رشته Vandaag نسبت داده میشه به شکل (سال - روز- ماه) میباشد . که نمیدانم ایا خطا از این میباشد یا خیر ؟
اگر بله باید به چه شکل تنظیمات برنامه رو برای یک کشور مشخص تنظیم نمود ؟
در ضمن من پیغام هم نمیگیرم

linux
سه شنبه 14 خرداد 1387, 21:42 عصر
سلام
مرسی دوست عزیز. درسته دستور sql میباشد اما من در وی بی میخوام اجرا کنم .
اما دستور cdate . من بنا به دلایلی نوع فیلد رو رشته گرفته ام و برای مقایسه باید تبدیل به تاریخ بشه این دستور هم فیلد رو برای مقایسه به تاریخ تبدیل میکنه .
از علامتهای ' ' هم استفاده کردم اما جواب نمیده . میگم قبلا جواب میداد. البته خودم به نتایجی رسیده ام که نمیدانم درسته یا خیر .
من تاریخ رو به شکل ( سال - ماه - روز) در بانک خیره کرده ام - در هلند از این روش استفاده میشه اما در اجرای گام به گام به گام مقداری که به رشته Vandaag نسبت داده میشه به شکل (سال - روز- ماه) میباشد . که نمیدانم ایا خطا از این میباشد یا خیر ؟
اگر بله باید به چه شکل تنظیمات برنامه رو برای یک کشور مشخص تنظیم نمود ؟
در ضمن من پیغام هم نمیگیرم
شما تاریخ را به صورت همان datetime بگیرید.
شما وقتی می خواهید یک دستور را به sql بفرستید فقط مجاز هستید که از دستورات sql استفاده کنید ، اصلا اهمیتی نداره که در vb یا c# یا هر زبان دیگر دارید برای sql دستور می نویسید باید سنتکس sql را رعایت کنید.
بعدش هم چرا اینجوری پارامتر را به sql می فرستید که ممکن کلی مشکل پیش بیاید با فرض اینکه شما فیلد FacturDatum از نوع datetime تعریف کردید اینطور کد بنویسید حتما از تعریف پارامتر برای ارسال پارامترها استفاده کنید


Using cnn As New SqlConnection("Data Source=BABAKPC;Initial Catalog=Northwind;Integrated Security=True")
cnn.Open()
Dim cmd As New SqlCommand()
Dim p1 As New SqlParameter
Dim p2 As New SqlParameter
p1.ParameterName = "@p1"
p1.DbType = DbType.DateTime
p1.Value = CDate("1980/01/01")
p2.ParameterName = "@p2"
p2.DbType = DbType.String
p2.Value = "WA"
cmd.CommandText = "SELECT * from employees where BirthDate <=@p1 AND Region=@p2"
cmd.Parameters.Add(p1)
cmd.Parameters.Add(p2)
cmd.Connection = cnn
Dim reader As SqlDataReader = cmd.ExecuteReader()
While reader.Read()
ListBox1.Items.Add(reader(0) & "" & reader(1))
End While
End Using

[

با تعریف پارامتر از بروز sqlinjection هم جلوگیری میشه