Şimdi Ara

Uzmanlarına Visual Basic 2010 & SQL Sorusu

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
3 Misafir - 3 Masaüstü
5 sn
8
Cevap
0
Favori
2.075
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
Öne Çıkar
0 oy
Sayfa: 1
Giriş
Mesaj
  • MErhaba

    bir program yazmam gerekli program excel ve bir MDB dosyasında sekron yapacak.

    Ben her işlem başına sonuna open() sorgu vs yazmak yerine şu iki functionu yazdım
    .
     
    Function MDBIslemler(ByVal Sorgu, ByVal Komut)
    Dim bag As New OleDbConnection("Provider=Microsoft.Jet.Oledb.4.0;Data Source=MDBFILE.mdb")

    Dim Cikti = ""
    Dim MDBCikti2 As OleDbDataReader = Nothing
    Try
    If bag.State = ConnectionState.Closed Then bag.Open()

    Dim cmd As New OleDbCommand(Sorgu, bag)
    If Komut = "ExecuteReader" Then
    MDBCikti = cmd.ExecuteReader()
    ElseIf Komut = "ExecuteNonQuery" Then
    Cikti = cmd.ExecuteNonQuery
    Else
    Cikti = cmd.ExecuteScalar
    End If
    Catch e As OleDbException
    For Me.i = 0 To e.Errors.Count - 1
    errorMessages += "GUNCELLEME HATASI." & ControlChars.Cr & "------------" & ControlChars.Cr & "Index #" & i.ToString() & ControlChars.Cr & "Message: " & e.Errors(i).Message & ControlChars.Cr & "NativeError: " & e.Errors(i).NativeError & ControlChars.Cr & "Source: " & e.Errors(i).Source & ControlChars.Cr & "SQLState: " & e.Errors(i).SQLState & ControlChars.Cr & ControlChars.Cr & ControlChars.Cr
    Cikti = 0
    Next i
    End Try
    Return Cikti
    End Function 'Bu OK



     

    Public Function ExcelIslemler(ByVal Sorgu, ByVal Komut)
    Dim conn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & excelDosya & ";Extended Properties='Excel 8.0;HDR=YES'")
    Dim Cikti = ""
    Try
    If conn.State = ConnectionState.Closed Then conn.Open()
    Dim ExcelKomut As New OleDbCommand(Sorgu, conn)
    If Komut = "ExecuteReader" Then
    ExcelCikti2 = ExcelKomut.ExecuteReader()
    ExcelCikti = ExcelCikti2
    Cikti = ExcelCikti2.HasRows
    Else
    Cikti = ExcelKomut.ExecuteScalar()
    End If

    Catch e As OleDbException
    For Me.i = 0 To e.Errors.Count - 1
    errorMessages += "Excelden Okuma Hatası.." & ControlChars.Cr & "------------" & ControlChars.Cr & "Index #" & i.ToString() & ControlChars.Cr & "Message: " & e.Errors(i).Message & ControlChars.Cr & "NativeError: " & e.Errors(i).NativeError & ControlChars.Cr & "Source: " & e.Errors(i).Source & ControlChars.Cr & "SQLState: " & e.Errors(i).SQLState & ControlChars.Cr & ControlChars.Cr & ControlChars.Cr
    Next i
    conn.Close()
    conn = Nothing
    End Try
    Return Cikti
    End Function


    program bu şekilde çalışmakta fakat
    return'dan once close yaparsam. mdb'de select işlemi'ni while ile bölmeye calistiğimda "Okuyucu kapalıyken Read öğesini arama girişimi geçersiz."
    hatasını vermekte close kaldırırsam program normal calismakta fakat bu seferde bağlantı açık kaldığından sorun yaşanmakta

    bu durum icin bana fikir verebilecek varmı*
    teşekkürler



    _____________________________
    OLMAK yada OLMAMAK
    İşte teknolojinin temeli budur..!




  • Fonksiyonu kullandıktan sonra dönen datareader içinde okuma yapıcaksanız bağlantının açık kalma zorunlulugu var bu yüzden bağlantıyı kaparsanız hata vermesi normal bu yüzden okuyucuyu döndürmek yerine onun içindekileri orada okuyup geriye datatable veya liste döndürün.
    _____________________________
  • peki örnek verebilir misin tam anlayamadim?
    yada söyle sorsam
      
    Public Class Form1
    Dim ExcelCikti2 As OleDbDataReader = Nothing
    Dim MDBCikti2 As OleDbDataReader = Nothing

    yaptim elde ettiğim datareader bunlarin icine ekleyip baglantıyı sonlandırdım yine olmadı böyle bi yöntemle yapabilir miyim?

    tşk
    _____________________________
    OLMAK yada OLMAMAK
    İşte teknolojinin temeli budur..!
  • Datareader yerine DataAdapter kullanmak bu durumda daha sağlıklı olacaktır. aşağıda mevcut kod üzerinde göstermeye çalıştım.

        Function MDBIslemler(ByVal Sorgu As String, ByVal Komut As String) 
    Dim bag As New OleDbConnection("Provider=Microsoft.Jet.Oledb.4.0;Data Source=MDBFILE.mdb")
    Dim Cikti

    Try
    Dim DAdapter As OleDbDataAdapter = New OleDbDataAdapter, CiktiTable As Datatable = New DataTable("Cikti")
    Dim cmd As New OleDbCommand(Sorgu, bag)
    DAdapter.SelectCommand = cmd

    If bag.State = ConnectionState.Closed Then bag.Open()

    If Komut = "ExecuteReader" Then
    DAdapter.fill(CiktiTable)
    Cikti = CiktiTable
    ElseIf Komut = "ExecuteNonQuery" Then
    Cikti = cmd.ExecuteNonQuery
    Else
    Cikti = cmd.ExecuteScalar
    End If
    Catch e As OleDbException
    For Me.i = 0 To e.Errors.Count - 1
    errorMessages += "GUNCELLEME HATASI." & ControlChars.Cr & "------------" & ControlChars.Cr & "Index #" & i.ToString() & ControlChars.Cr & "Message: " & e.Errors(i).Message & ControlChars.Cr & "NativeError: " & e.Errors(i).NativeError & ControlChars.Cr & "Source: " & e.Errors(i).Source & ControlChars.Cr & "SQLState: " & e.Errors(i).SQLState & ControlChars.Cr & ControlChars.Cr & ControlChars.Cr
    Cikti = 0
    Next i
    Finally
    If bag.State = ConnectionState.Open Then bag.Close()

    End Try
    Return Cikti
    End Function 'Bu OK



    < Bu mesaj bu kişi tarafından değiştirildi LaCagot -- 29 Haziran 2011; 23:56:20 >
    _____________________________




  • Merhaba
    cevabın için teşekkürler fakat verdiğin kod ile işlem yaptığımda şu hatayı almaktayım.

    NullReferenceException was unhandled
    ---
    Nesne başvurusu bir nesnenin örneğine ayarlanmadı.

    neden olabilir?
    _____________________________
    OLMAK yada OLMAMAK
    İşte teknolojinin temeli budur..!
  • anlaşılan daha uykum daha çıkmadan kodlara baktım

    while mdbcikti yerine

    For Each MDBCikti As DataRow In MDBIslemler("select * from Tarih", "ExecuteReader").Rows

    kullanınca sorun ortadan kalktı :)
    teşekkürler
    _____________________________
    OLMAK yada OLMAMAK
    İşte teknolojinin temeli budur..!
  • Cikti Değerinin dönüş türü datatable, integer veya string olabilir gözüküyor. Fonksiyon sonucunu bu anlamda dikkatli yönetmen gerekecek.
    Kodu aşağıdaki gibi yaptım tekrar denersin.
        Function MDBIslemler(ByVal Sorgu As String, ByVal Komut As String) 
    Dim bag As New OleDbConnection("Provider=Microsoft.Jet.Oledb.4.0;Data Source=MDBFILE.mdb")
    Try
    Dim DAdapter As OleDbDataAdapter = New OleDbDataAdapter
    Dim cmd As New OleDbCommand(Sorgu, bag)
    DAdapter.SelectCommand = cmd

    If bag.State = ConnectionState.Closed Then bag.Open()

    If Komut = "ExecuteReader" Then
    Dim Cikti As DataTable = New DataTable("Cikti")
    DAdapter.Fill(Cikti)
    Return Cikti
    ElseIf Komut = "ExecuteNonQuery" Then
    Dim Cikti As Integer = 0
    Cikti = cmd.ExecuteNonQuery
    Return Cikti
    Else
    Dim Cikti As String = ""
    Cikti = cmd.ExecuteScalar.ToString
    Return Cikti
    End If
    Catch e As OleDbException
    Dim errorMessages As String = "", Cikti As Integer = 0
    For i As Integer = 0 To e.Errors.Count - 1
    errorMessages += "GUNCELLEME HATASI." & ControlChars.Cr & "------------" & ControlChars.Cr & "Index #" & i.ToString() & ControlChars.Cr & "Message: " & e.Errors(i).Message & ControlChars.Cr & "NativeError: " & e.Errors(i).NativeError & ControlChars.Cr & "Source: " & e.Errors(i).Source & ControlChars.Cr & "SQLState: " & e.Errors(i).SQLState & ControlChars.Cr & ControlChars.Cr & ControlChars.Cr
    Cikti = 0
    Next i
    Return Cikti
    Finally
    If bag.State = ConnectionState.Open Then bag.Close()

    End Try

    End Function 'Bu OK
    _____________________________




  • Yapay Zeka’dan İlgili Konular
    Visual basic satır atlama
    6 yıl önce açıldı
    Daha Fazla Göster
  • Teşekkürler ben for ile tüm soruna çözüm bulmuştum buda farkli bir bakış sağol

    eğer bilgin var ise şu konuda da yardımcı olabilirsen sevinirim.

    http://forum.donanimhaber.com/m_50318616/tm.htm
    _____________________________
    OLMAK yada OLMAMAK
    İşte teknolojinin temeli budur..!
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.