veri tabanında tarih sorunu?

Katılım
7 Nisan 2007
Mesajlar
124
Excel Vers. ve Dili
office 2003
arkadaşlar herkese kolay gelsin.
kitap1 e C:veri.mdb de bulunan verileri şu şekilde alıyorum
Kod:
Dim adoCN As Object
 Dim RS As Object
 Dim strSQL As String
 Set tarihbasla = Sheets("sayfa2").Cells(1, 1)
 Set tarihbitir = Sheets("sayfa2").Cells(2, 1)
       DatabasePath = "C:\veri.mdb"
    If Dir(DatabasePath) = "" Then
        MsgBox "veri tabanı bulunamadı", vbCritical
        Exit Sub
    End If
        Set adoCN = CreateObject("ADODB.Connection")
    adoCN.Provider = "Microsoft.Jet.OLEDB.4.0"
    adoCN.ConnectionString = DatabasePath
    adoCN.Open
    Set RS = CreateObject("ADODB.recordset")
   
    strSQL = "SELECT * FROM [tablo1] " & _
    "WHERE    P_Satir23 like 2 and P_Satir19>=" & tarihbasla & " AND P_Satir19<=" & tarihbitir & " order by P_Satir21"
    RS.Open strSQL, adoCN, 1, 3
        RS.movefirst
       For i = 2 To RS.RecordCount
           Sheets("sayfa1").Cells(i, 1) = RS("P_Satir19")
           Sheets("sayfa1").Cells(i, 2) = RS("P_Adi")
           Sheets("sayfa1").Cells(i, 3) = RS("P_Satir23").Value
           Sheets("sayfa1").Cells(i, 4) = RS("P_Satir21").Value
           Sheets("sayfa1").Cells(i, 5) = RS("P_Satir24").Value
           Sheets("sayfa1").Cells(i, 6) = RS("P_Satir25").Value
             RS.MoveNext
        Next
       
        RS.Close
    adoCN.Close
    Set RS = Nothing
çok önemli bir sorunum var.çünkü P_Satir19 daki tarih formatı aynen şu şekilde
39712
sayı olarak kaydedilmiş.
durum böyle olunca tarihbasla daki veri tarih formatında (10.10.2008 gibi)
ama P_Satir19 öyle olmadığı için sorun oluşuyor ve aynen şu hatayı veriyor.


run-time error '-2147217900 ( 8004e14)':
'P_Satir23 like 2 and P_Satir19>=10.10.2008 AND P_Satir19<=15.11.2008' soru ifadesi içindeki sayıda söz dizimi hatası

bu hayatı nasıl giderebilirim.
veri.mdb de herhangi bir değişikilik yapamam.
 

Ekli dosyalar

Katılım
14 Şubat 2006
Mesajlar
3,426
Excel Vers. ve Dili
(Excel 2016 - İngilizce)
Altın Üyelik Bitiş Tarihi
30-11-2022
Örnek veritabanındaki tarih alanı Text formatında.Asıl veritabanında da tarih alanı aynı mı?
 
Katılım
7 Nisan 2007
Mesajlar
124
Excel Vers. ve Dili
office 2003
evet asıl veritabanında da text olarak. ama ben bu sütünun formatını değiştirmem ( el ile)
verileri alırken formatını değiştirebilir miyim acaba?
 
Katılım
14 Şubat 2006
Mesajlar
3,426
Excel Vers. ve Dili
(Excel 2016 - İngilizce)
Altın Üyelik Bitiş Tarihi
30-11-2022
Şimdilik aklıma gelen önce verilerimizi tarih alanını tarihe çevirerek Sayfa3'e almak.Sonra ise tekrardan bu sayfaya bağlantı kurarak iki tarih arası verilerinizi Sayfa1'e kopyalamak.

Aşağıdaki kodları deneyiniz.

Kod:
Sub aktar()
 Dim adoCN, adoCN1 As Object
 Dim RS, RS1 As Object
 Dim strSQL, strSQL1 As String
 
 
 Set s1 = Sheets("Sayfa1")
 Set s2 = Sheets("Sayfa2")
 Set s3 = Sheets("Sayfa3")
  
tarihbasla = (s2.Cells(1, 1))
tarihbitir = (s2.Cells(2, 1))
tarih1 = Format(CDate(tarihbasla), "MM/DD/YYYY")
tarih1 = Replace(tarih1, ".", "/")
tarih2 = Format(CDate(tarihbitir), "MM/DD/YYYY")
tarih2 = Replace(tarih2, ".", "/")
 
    DatabasePath = "C:\veri.mdb"
    If Dir(DatabasePath) = "" Then
        MsgBox "veri tabanı bulunamadı", vbCritical, "Phyazılım"
        Exit Sub
    End If
    GoTo son
     '*************1.Bölüm*******************
    s3.Range("a2:f100").ClearContents
    
    Set adoCN = CreateObject("ADODB.Connection")
    adoCN.Provider = "Microsoft.Jet.OLEDB.4.0"
    adoCN.ConnectionString = DatabasePath
    adoCN.Open
    Set RS = CreateObject("ADODB.recordset")
   
     strSQL = "SELECT * FROM [tablo1]"
    RS.Open strSQL, adoCN, 1, 3
        RS.movefirst
       
       For i = 1 To RS.RecordCount
          s3.Cells(i + 1, 1) = Format(CDate(RS("P_Satir19").Value), "dd/mm/yyyy")
          s3.Cells(i + 1, 2) = RS("P_Adi").Value
          s3.Cells(i + 1, 3) = RS("P_Satir23").Value
          s3.Cells(i + 1, 4) = RS("P_Satir21").Value
          s3.Cells(i + 1, 5) = RS("P_Satir24").Value
          s3.Cells(i + 1, 6) = RS("P_Satir25").Value
          RS.MoveNext
      Next i
    RS.Close
    adoCN.Close
    Set RS = Nothing
    Set adoCN = Nothing
    '*************2.Bölüm*******************
son:
    s1.Range("a2:f100").ClearContents
    
    Set adoCN1 = CreateObject("ADODB.Connection")
  adoCN1.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.FullName & ";" & _
"Extended Properties=Excel 8.0;"
   
    Set RS1 = CreateObject("ADODB.recordset")
   
   strSQL1 = "SELECT * FROM [Sayfa3$a1:f100] WHERE  [P_Satir23] like 2 and [P_Satir19] between #" & tarih1 & "# AND #" & tarih2 & "# AND [P_Satir19] IS NOT NULL order by [P_Satir19]"
    RS1.Open strSQL1, adoCN1, 1, 3
        RS1.movefirst
       MsgBox RS1.RecordCount & " " & strSQL1
       For i = 1 To RS1.RecordCount
          s1.Cells(i + 1, 1) = RS1("P_Satir19").Value
          s1.Cells(i + 1, 2) = RS1("P_Adi").Value
          s1.Cells(i + 1, 3) = RS1("P_Satir23").Value
          s1.Cells(i + 1, 4) = RS1("P_Satir21").Value
          s1.Cells(i + 1, 5) = RS1("P_Satir24").Value
          s1.Cells(i + 1, 6) = RS1("P_Satir25").Value
          RS1.MoveNext
      Next i
    RS1.Close
    adoCN1.Close
    Set RS1 = Nothing
    Set adoCN1 = Nothing
     '**************************************
    Set s1 = Nothing
    Set s2 = Nothing
    Set s3 = Nothing
End Sub
 

Ekli dosyalar

Üst