Skip to main content

AccessTr.neT


Listbox Da Verilerin Listelenmesi Hakkında.

Oğuz Türkyılmaz
Oğuz Türkyılmaz
12
619

Listbox Da Verilerin Listelenmesi Hakkında.

Çözüldü #1
Herkese Merhaba uzun zamandır Foruma konu açmamıştım. C# ve ASP.NET Core ile uygulama geliştirmeye devam ediyorum hobi olarak çevremdekilere ama Vba dan çok uzak kaldım Şu an Tilki yine kürkçü dükkanına döndü. Sorunum Yapay zeka kod uygulamalarından aldığım yanıtlarla bile çözemediğim saçma sapan aslında zamanında çok kolay hallettiğim bir konuydu ama Yapay zeka kullanımı insanı tembelleştirdiği için bende daha da yaşlandığımdan sorunu bir türlü Yapay zekacımla birlikte çözemedik. Muhtelif bir sürü denemeler yapıldı kod ile yada lstPersonelListesi properties seçeneğinden fakat çözümü bulamadık. 15 kolonun sadece 2 tanesini listboxta gösterebiliyorum diğer alanlardaki veriler gelmiyor sütun başlıklarını bile getiremedim. İlgilenenlere şimdiden teşekkür ederim.
Private Sub UserForm_Initialize()

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sqlSorgusu As String
Dim i As Integer

' Veritabanı bağlantısını kur
Set cn = New ADODB.Connection
cn.ConnectionString = "Driver={ODBC Driver 17 for Sql Server};" & _
"Server=OĞUZ\SQLEXPRESS;" & _
"Database=db_Personel;" & _
"Trusted_Connection=Yes;"

On Error GoTo HataBaglanti
cn.Open
On Error GoTo 0 ' Hata yakalamayı kapat


sqlSorgusu = "SELECT * FROM tbl_Personel;"

Set rs = New ADODB.Recordset
On Error GoTo HataVeriOku
rs.Open sqlSorgusu, cn, adOpenStatic, adLockReadOnly
On Error GoTo 0

' ListBox'ın sütun sayısını ayarla (tablodaki alan sayısı kadar)
lstPersonel.ColumnCount = rs.Fields.Count
' Debug.Print "ColumnCount değeri: " & lstPersonel.ColumnCount

' ListBox'a verileri yükle
If Not rs.EOF Then
Do While Not rs.EOF
' Her bir kayıt için bir dizi oluştur
Dim personelBilgileri() As Variant
ReDim personelBilgileri(rs.Fields.Count - 1)

' Kayıttaki tüm alanları diziye aktar
For i = 0 To rs.Fields.Count - 1
personelBilgileri(i) = rs.Fields(i).Value
Next i

' Diziyi ListBox'a bir satır olarak ekle
lstPersonel.AddItem Join(personelBilgileri, vbTab) ' Alanları sekme ile ayır
' lstPersonel.AddItem Join(personelBilgileri, ";") ' Sekme yerine noktalı virgül kullan
rs.MoveNext
Loop
End If

' ListBox'ın sütun sayısını tekrar ayarla (emin olmak için)
lstPersonel.ColumnCount = rs.Fields.Count
' Başlık satırını ekle
lstPersonel.AddItem "ID" & vbTab & "Ad Soyad" & vbTab & "Doğum Tarihi" & vbTab & "..." ' Diğer başlıkları da ekleyin


' lstPersonel.ColumnWidths = "30;50;50;50;50;50;50;50;50;50;50;50;50;50;50"

rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing

Exit Sub

HataBaglanti:
MsgBox "Veritabanına bağlanırken bir hata oluştu: " & Err.Description, vbCritical
'
If Not cn Is Nothing Then
If cn.State = adStateOpen Then cn.Close
Set cn = Nothing

HataVeriOku:
MsgBox "Personel verilerini okurken bir hata oluştu: " & Err.Description, vbCritical

If Not rs Is Nothing Then
If rs.State = adStateOpen Then rs.Close
Set rs = Nothing
End If

If Not cn Is Nothing Then
If cn.State = adStateOpen Then cn.Close
Set cn = Nothing
End If
End If

End Sub
.zip Personel.zip (Dosya Boyutu: 43,03 KB | İndirme Sayısı: 3)
Access Çekirgesi 
[Resim: img-cray.gif]


Cevapla
#2
If Not rs.EOF Then
Do While Not rs.EOF
' Her bir kayıt için bir dizi oluştur
Dim personelBilgileri() As Variant
ReDim personelBilgileri(rs.Fields.Count - 1)

' Kayıttaki tüm alanları diziye aktar
For i = 0 To rs.Fields.Count - 1
personelBilgileri(i) = rs.Fields(i).Value
Next i

' Diziyi ListBox'a bir satır olarak ekle
lstPersonel.AddItem Join(personelBilgileri, vbTab) ' Alanları sekme ile ayır
' lstPersonel.AddItem Join(personelBilgileri, ";") ' Sekme yerine noktalı virgül kullan
rs.MoveNext
Loop
End If
yerine aşağıdaki kodu dener misiniz?
Kod:
If Not rs.EOF = True Then lstPersonel.Column = rs.GetRows

Not:
belirtmeyi unutmuşum aşağıdaki satırı da silmelisiniz
Kod:
lstPersonel.AddItem "ID" & vbTab & "Ad Soyad" & vbTab & "Doğum Tarihi" & vbTab & "..." ' Diğer başlıkları da ekleyin
Cevapla
#3
lstPersonel.AddItem Join(personelBilgileri, vbTab) <-- bu kod edeniyle veriler ilk sütuna atanıyor siz bütün alanları tab ile birleştirmişsiniz bu nedenle sadece tek sütun görünüyor
Cevapla
#4
Denemediğim bir yapay zeka uygulamasında sütunları getirmeyi başardım fakat listbox sadece 10 adet sütun gösterebildiği için ( Bunu da hatırlattı sağolsun) Sorun sadece 15 sütundan istediğim 10 tanesini gösterme şansım var mı ya evrildi.


Kod:
Private Sub UserForm_Initialize()

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim sqlSorgusu As String
    Dim i As Integer
    Dim rowIndex As Long
    Dim alanSayisi As Integer

    Set cn = New ADODB.Connection
    cn.ConnectionString = "Driver={ODBC Driver 17 for SQL Server};" & _
                          "Server=OĞUZ\SQLEXPRESS;" & _
                          "Database=db_Personel;" & _
                          "Trusted_Connection=Yes;"
    On Error GoTo HataBaglanti
    cn.Open
    On Error GoTo 0

    sqlSorgusu = "SELECT * FROM tbl_Personel;"
    Set rs = New ADODB.Recordset
    On Error GoTo HataVeriOku
    rs.Open sqlSorgusu, cn, adOpenStatic, adLockReadOnly
    On Error GoTo 0

    If rs.EOF Then GoTo TemizleHerşey

    alanSayisi = rs.Fields.Count

    With lstPersonel
        .Clear
        .ColumnCount = alanSayisi
        .ColumnWidths = String(alanSayisi - 1, "80;") & "80"
    End With

    Do While Not rs.EOF
        ' Güvenli AddItem ile ilk sütunu ekle
        On Error Resume Next
        lstPersonel.AddItem NzText(rs.Fields(0).Value)
        If Err.Number <> 0 Then Exit Do ' additem başarısızsa çık
        On Error GoTo 0

        rowIndex = lstPersonel.ListCount - 1

        For i = 1 To alanSayisi - 1
            On Error Resume Next
            lstPersonel.List(rowIndex, i) = NzText(rs.Fields(i).Value)
            On Error GoTo 0
        Next i

        rs.MoveNext
    Loop

TemizleHerşey:
    rs.Close: cn.Close
    Set rs = Nothing: Set cn = Nothing
    Exit Sub

HataBaglanti:
    MsgBox "Veritabanına bağlanamadı: " & Err.Description, vbCritical
    Resume TemizleHerşey

HataVeriOku:
    MsgBox "Veri okunamadı: " & Err.Description, vbCritical
    Resume TemizleHerşey
End Sub

Private Function NzText(val As Variant) As String
    If IsNull(val) Or IsEmpty(val) Then
        NzText = ""
    Else
        NzText = CStr(val)
    End If
End Function


(16/05/2025, 17:20)berduş yazdı: lstPersonel.AddItem Join(personelBilgileri, vbTab) <-- bu kod edeniyle veriler ilk sütuna atanıyor siz bütün alanları tab ile birleştirmişsiniz bu nedenle sadece tek sütun görünüyor

O bölümde denemelerden birinde eklenmişti Berduş hocam.
Access Çekirgesi 
[Resim: img-cray.gif]


Son Düzenleme: 16/05/2025, 17:50, Düzenleyen: Oğuz Türkyılmaz.
Cevapla
#5
Önerdiğim değişiklikleri denediniz mi?
Başlıklar dışındakileri almalı
Cevapla
#6
başlıklar için yeni bir dizi oluşturup başlıklar ile liste kutusuna eklenmesi sağlanabilir dizi aracılığıyla eklerken sütün sayısı 13den fazla olabiliyor
yada sorun olmayacaksa veriler Excel sayfasına aktarılıp başlıklar ile alınması sağlanabilir
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da
Task