الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

البحث بين تاريخين

بدأه vetch في 23 أغسطس 2012 · 5 رد · 3,951 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لدى مشروع اقوم بتسجيل بعض الكائنات وفى بيانات التسجيل تاريخ الجمع

انا فى جمله insert استخدم هذا الكود بالنسبه للتاريخ

 f3 = "'" & DateTimePicker1.Text & "',"

طبعا انا بعوض بقيمه التاريخ داخل f3 وبعد كده بستخدم f3

بس السؤال هنا

هل انا صح انى عامل .text

ولا المفروض يكون شىء اخر

انا عامل فى قاعده البيانات sql2005

التاريخ

nvarchar(50)

جمله الاستعلام عن الكائنات التى تم تسجيلها بين تاريخين كالتالى

 Dim dss As New DataSet
        Dim adq As New SqlClient.SqlDataAdapter

        Dim cmdw As New SqlClient.SqlCommand
        cmdw.Connection = cn
        cmdw.CommandType = CommandType.Text
        cmdw.CommandText = "select * from ann where date1 between '" & DateTimePicker1.Text & "' and  '" & DateTimePicker2.Text & "'"
        adq.SelectCommand = cmdw
        adq.Fill(dss, "ann")
        resalet.DataGridView1.DataSource = dss.Tables("ann")
        resalet.Show()

date1 اسم التاريخ داخل قاعده البيانات

انا بطلع النتيجه فى داتا جريد

ياريت بس اعرف هل انا كده صح ولا فى شىء خطأ او هناك شىء ناقص؟؟؟؟

تم تعديل هذه المشاركة بواسطة vetch في 23 أغسطس 2012 في 14:14

#2

استخدم .Value.ToString() بدلاً من .Text

لأن .Text ستعيده كـ human-readable date/time

وهذه القيمة لا يمكن تخزينها في حقل من النمط DATETIME في القاعدة.

بينما الـ .Value.ToString() ستعيد أحد الأشكال المدعومة في MSSQL.

1

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#3

بالنسبة لي أستخدم متغير من نوع Date وأعطيه قيمة DateTimePicker فيكون الكود كالتالي

Dim x as Date = DateTimePicker1.value
Dim y as date = DateTimePicker2.value

ثم جملة الاستعلام كالتالي

cmdw.CommandText = "select * from ann where date1 between " & x & " and  " & y

والأفضل أن تجعل الحقل في قاعدة البيانات من النوع Date

تم تعديل هذه المشاركة بواسطة asn في 23 أغسطس 2012 في 22:21

#4

شكرا جدا بارك الله فيك وارضاك ورزقك الفردوس الاعلى

اخى asn

لقد قمت فعلا بفعل الطريقه تماما قمت بتغيير الداتا فى قاعده البيانات الى date time

وقمت بعمل متغير من نوع date

Dim x as Date = date1.value

وكان الكود فى جمله الادخال

        Dim x As Date = date1.Value
        Dim f1, f2, f3, f4  As String
        f1 = "'" & txtcode.Text & "',"
        f2 = "'" & ComboBox1.Text & "',"
        f3 = "'" & x & "',"
        f4 = "'" & txtsite.Text & "'"


  s = " insert into zo"
        s = s & "(code,name,date1,site)"
       s = s & "values (" & f1 & f2 & f3 & f4 &  & ")"
  cmd.CommandText = s
        h = cmd.ExecuteNonQuery
        MsgBox("تم الحفظ بنجاح")

لكن دائما هذه الرساله

Conversion failed when converting datetime from character string.

تم تعديل هذه المشاركة بواسطة vetch في 24 أغسطس 2012 في 15:58

#5

أعتقد الخطأ هنا في استخدام أقواس التنصيص المفردة (')

من الأفضل في جملة INSERT و Update أن تتعامل مع Parameters فتكون الجملة كالتالي

s = " insert into zo"
        s = s & "(code,name,date1,site)"
       s = s & "values (@code,@name,@date1,@site)"

cmd = New SqlCommand(s, cn)

With cmd.Parameters
            .AddWithValue("@code", txtcode.Text).DbType = DbType.String
 .AddWithValue("@name", ComboBox1.Text).DbType = DbType.String
.AddWithValue("@date1",x).DbType = DbType.Date
.AddWithValue("@site", txtsite.Text).DbType = DbType.String
End With

cn.Open
cmd.ExecuteNonQuery()
cn.Close

تم تعديل هذه المشاركة بواسطة asn في 24 أغسطس 2012 في 17:14

#6

الـ single quotes لا تسبب مشكلة في مثل هذا الاستعلام..

بكل الأحوال استخدام Parameters أفضل ولكن المشكلة أنه كان يستخدم البارمترات من البداية ومع ذلك بقيت تظهر المشكلة! :blink:

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

مواضيع مشابهة