Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Baza danych - ADO
i-spy



Typ: neutral
Postów: 44
Zarejestrowany: Apr 2004
Baza danych - ADO

Hej!

Prubuje zrealizować w moim programie wymiane danych z baza danych. Oto przykładowy kod:

Private Sub Command1_Click()

Dim adoConnection As ADODB.Connection
Dim adoRecordset As ADODB.Recordset
Dim connectString As String

'&#8212;Create a new connection --
Set adoConnection = New ADODB.Connection

'&#8212;Create a new recordset --
Set adoRecordset = New ADODB.Recordset

'&#8212;Build our connection string to use when we open the connection --

connectString = "Provider=Microsoft.Jet.OLEDB.3.51;" & "Data Source=C:\Biblio.mdb"

adoConnection.Open connectString
adoRecordset.Open "Publishers", adoConnection

Do Until adoRecordset.EOF

List1.AddItem adoRecordset!Name
adoRecordset.MoveNext

Loop

adoRecordset.Close
adoConnection.Close
Set adoRecordset = Nothing
Set adoConnection = Nothing

End Sub

Ten kod wypisuje dane z bazy do listboxa. Nie wiem jak wpisac dane np z listboxa do bazy. Scislej to wyobrazam to sobie tak, ze podam nazwe tabeli, wspolrzedne "komurki" gdzie maja byc zapisane dane. Proszę o pomoc, najlepiej jakis przykładowy kodzik.

Pozdrawiam


_____________________________________________
Oto moja pasja...
www.vbprograms.prv.pl
!Zapraszam

25-05-2004 18:03
Pokaż profil i-spy  Wyślij email do i-spy   Odwiedź stronę i-spy       2121177
karolinavb




Typ: neutral
Postów: 468
Zarejestrowany: Jan 2003

Przykład przy założeniu :
1.Tak jak w przytoczonym fragmencie zamknąłeś połączenie po wypełnieniu listy i ja wobec tego zamykam
2.Wprowadzenie wartości do określonego pola (Field), czy jak to nazywasz komórki wymaga 2-ch co najmniej informacji: nawy pola oraz informacji o rekordzie w którym należy wstawić informacje (X,Y). Ponieważ w Twoim kodzie do listy nie została wstawiona informacja pozwalająca zidentyfikować rekord pozwoliłam sobie zmodyfikować wypełnianie listy o wprowadzenie do właściwości ItemData wartości pola PubID tabeli Publisher ( jeśli to o tą tabelę Ci chodzi taką mam bazę biblio.mdb). Pole to identyfikuje jednoznacznie rekord w tej tabeli i jest autonumerowane -  ADO2ListBox()
3.Rozpatrzyłam 2 przypadki: dodawanie nowego elementu do listy i wprowadzenie tej informacji do tabeli w zdarzeniu  cmdDodajDoListy_Click. Wówczas ItemData jest puste i należy wprowadzić nowy rekord do bazy, oraz w zdarzeniu cmdModyfikuj_Click , gdzie tylko modyfikujemy zawarośc pola Name np. dla ListIndex=4. Wobec tego ItemData jest znane i tego rekordu szukamy w tabeli, aby zmodyfikować pole Name.
4.W obu wypadkach posługujemy się procedurą WpiszDoTabeli(ByVal iListindex)
5.W przypadku dodania nowego rekoru uzupełniamy oczywiście ItemData nowej pozycji listy o wartość pola PubID tabeli Publisher po aktualizacji
6.To oczywiście tylko przykładowe rozwiązanie oparte na Twoim fragmencie kodu

Option Explicit
Dim adoConnection As ADODB.Connection
Dim adoRecordset As ADODB.Recordset
Dim connectString As String

Private Sub ADO2ListBox()
'''' wypełnianie listy
Set adoConnection = New ADODB.Connection
Set adoRecordset = New ADODB.Recordset
adoConnection.Open connectString
adoRecordset.Open "Publishers", adoConnection
With adoRecordset
Do Until .EOF
    If Not IsNull(.Fields("PubId" )) Then
        List1.AddItem (.Fields("Name" ))
        List1.ItemData(List1.NewIndex) = .Fields("PubID" )
    End If
    .MoveNext
Loop
.Close
End With
adoConnection.Close
Set adoRecordset = Nothing
Set adoConnection = Nothing
End Sub

Private Sub cmdDodajDoListy_Click()
With List1
    '''' tak przykładowo dodajemy element do listy
    '''' ItemData nie wypełniamy
    .AddItem (Time)
    Call WpiszDoTabeli(.NewIndex)
End With
End Sub

Private Sub cmdModyfikuj_Click()
    '''' gdybyśmy tylko zmieniali wartośc List1.list(... np 4)
    Call WpiszDoTabeli(4)
End Sub

Private Sub Form_Load()
connectString = "Provider=Microsoft.Jet.OLEDB.3.51;" & "Data Source=" _
    & App.Path & "\Biblio.mdb"
Call ADO2ListBox()
End Sub

Private Sub WpiszDoTabeli(ByVal iListindex)
Dim sCriteria As String
Dim bNowy As Boolean
Set adoConnection = New ADODB.Connection
Set adoRecordset = New ADODB.Recordset

adoConnection.Open connectString
With adoRecordset
    .CursorLocation = adUseClient
    .CursorType = adOpenStatic
    .LockType = adLockOptimistic
    .Open "Publishers", connectString
    If List1.ItemData(iListindex) = 0 Then
'''' dodajemy nowy rekord
        .AddNew
        bNowy = True
    Else
'''' szukamy rekordu o danym PubId
        sCriteria = "PubId=" & List1.ItemData(iListindex)
        .Find sCriteria, 0, adSearchForward, adBookmarkFirst
        If .EOF() Or .BOF() Then
            .AddNew
            bNowy = True
        End If
    End If
    .Fields("Name" ).Value = List1.List(iListindex) & "  " & Time
'''' pole PubId jest autonumerowane
    .Update
    .Requery
    If Err = 0 Then
        If bNowy Then
            .MoveLast
            List1.ItemData(iListindex) = .Fields("PubID" ).Value
        End If
        MsgBox ("Element wprowadzony" & vbCrLf & .Fields("PubID" ).Value)
    End If
    .Close
   
End With
adoConnection.Close
Set adoRecordset = Nothing
Set adoConnection = Nothing
End Sub


Private Sub Form_Unload(Cancel As Integer)
Set adoRecordset = Nothing
Set adoConnection = Nothing
End Sub

Private Sub List1_DblClick()
MsgBox (List1.ItemData(List1.ListIndex))
End Sub

Przykład może trochę jest rozbudowany, ale było malo informacji, np gdzie i w jaki sposób edytujesz wrartość Name, wobec tedo założyłam, że dodajesz np nowy element do listy.

Pozdrawiam Karolina


_____________________________________________
Karolina

26-05-2004 09:24
Pokaż profil karolinavb  Wyślij email do karolinavb   
Wszystkich odpowiedzi: 1 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1