Avatar billede cronck Nybegynder
29. november 2004 - 20:20 Der er 7 kommentarer og
2 løsninger

Hent fra DB hvor ID = bla bla ved hjælp af en simpel kommando

Hej eksperter...

I ASP kan jeg bruge denne kommando til at hente oplysninger med:
strSQLItem = "Select * from tbl_Items where id = " & request.querystring("id")
Set rsItem = ConnItems.Execute(strSQLItem)
Og der henter jeg værdierne med rsItem("bla bla")


Jeg bruger for eks. denne til at slette ting med i VB, men hvordan kan hente oplysningerne ligeså nemt som i asp?
Set db = DBEngine.Workspaces(0).OpenDatabase("E:\[Visual Basic]\[My Tools]\DVD Katalog\System\DB.mdb")
db.Execute "Delete * from DVDs where Id = " & lstDVDs.SelectedItem
Avatar billede sjh Nybegynder
01. december 2004 - 17:35 #1
Det her plejer altid at virke..


Private Sub Form_Load()
Dim intID  As Integer
Dim objRs  As Object
Dim strSQL  As String
Dim objConn As Object
Dim strConn As String
Dim strPass As String
Dim strPath As String

  ' Adgangskode til databasen
  strPass = "password"

  ' Path til databasen
  strPath = App.Path & "\database.mdb"

  ' Dit id
  intID = 1

  ' SQL-String
  strSQL = "SELECT * FROM tbl_Items WHERE id = " & intID

  ' Connect-String
  strConn = "PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver (*.mdb)};" & _
            "DBQ=" & strPath & ";PWD=" & strPass & ";"

  ' Create ADODB Connection
  Set objConn = CreateObject("ADODB.Connection")

  ' Open Connect-String
  objConn.Open strConn

  ' Execute SQL-String
  Set objRs = objConn.Execute(strSQL)

  ' Do Loop
  ' --------------------------------------------------------------------
  ' Hvis du bruger SQL-String:
  ' strSQL = "Delete * from DVDs where Id = " & lstDVDs.SelectedItem
  ' ...Execute(strSQL)
  ' Skal du ikke køre dette loop her..
  ' --------------------------------------------------------------------
  Do While Not objRs.EOF
    Debug.Print objRs("id")
    Debug.Print objRs("bla bla")
    objRs.MoveNext
  Loop
  ' --------------------------------------------------------------------

  Set objRs = Nothing

  ' Close Connect-String
  objConn.Close

  Set objConn = Nothing
End Sub
Avatar billede sjh Nybegynder
01. december 2004 - 17:47 #2
Du kan jo også gøre sådan.. så skal du ikke skrive alle de ting hver gang..

' -------------------------------------- Form1 --------------------------------------
Option Explicit

Private strSQL  As String
Private objConn As Object
Private strConn As String

Private Sub Form_Load()
Dim strPass As String
Dim strPath As String

  strPass = "password"

  strPath = App.Path & "\database.mdb"

  strConn = "PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver (*.mdb)};" & _
            "DBQ=" & strPath & ";PWD=" & strPass & ";"

  Set objConn = CreateObject("ADODB.Connection")
End Sub

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

Public Sub ViewAll()
Dim objRs As Object

  strSQL = "SELECT * FROM tbl_Items"
  objConn.Open strConn
  Set objRs = objConn.Execute(strSQL)

  Do While Not objRs.EOF
    Debug.Print objRs("id")
    Debug.Print objRs("bla bla")
    objRs.MoveNext
  Loop

  Set objRs = Nothing
  objConn.Close
End Sub

Public Sub DeleteId(intID As Integer)
  strSQL = "Delete * from DVDs where Id = " & intID
  objConn.Open strConn
  Call objConn.Execute(strSQL)
  objConn.Close
End Sub
' -------------------------------------- Form1 --------------------------------------
Avatar billede cronck Nybegynder
01. december 2004 - 22:21 #3
Hmm... Det som at jeg ville undgå, var at loope db'en igennem, da den godt kan blive ret stor...
Det som jeg mente var
strSQL = "Delete * from DVDs where Id = " & lstDVDs.SelectedItem
'...Execute(strSQL)

Men jeg bruger ikke lige SQL i mit vb program, men kender det temlig godt fra asp, spørgsmålet er så om at det bare er det samme hele vejen igennem?
Avatar billede sjh Nybegynder
01. december 2004 - 22:29 #4
Jeg mener også du kan gøre sådan.. altså opsamle alle de IDér som skal slettes..

strSQL = "DELETE FROM DVDs WHERE id IN (1, 2, 3, 4, ...)"
...Execute(strSQL)

men du skal jo stadivæk vide hvad du vil slette..
Avatar billede cronck Nybegynder
01. december 2004 - 22:48 #5
Det lyder smart...
Hvordan skal jeg opbygge forbindelsen?
Og hvordan opdaterer/opretter jeg?
Avatar billede sjh Nybegynder
01. december 2004 - 22:55 #6
du kunne jo gøre det sådan...


' ------------------------------- Form1 -------------------------------
Option Explicit

Private Sub cmdDelete_Click() '<- CommandButton
Dim i As Long
Dim strSQL As String
Dim strDelete As String

  With lstDVDs '<- ListBox
      For i = 0 To (.ListCount - 1)
        If .Selected(i) = True Then
          strDelete = strDelete & .ItemData(i) & ", "
        End If
      Next
  End With

  If Len(strDelete) Then
    strDelete = Left$(strDelete, Len(strDelete) - 2)
    strSQL = "DELETE FROM DVDs WHERE id IN (" & strDelete & ")"

    ' Her kommer den SQL-String ud som sletter dine records
    MsgBox strSQL
  End If

End Sub

Private Sub Form_Load()
Dim i As Long

  ' Husk at sette .Style til 1 - Checkbox ( lstDVDs.Style = 1 )
  ' Den her er bare som en test..

  For i = 1 To 50
    With lstDVDs '<- ListBox
      .AddItem "Navn " & i
      .ItemData(.NewIndex) = i '<- i er altså ID
    End With
  Next

End Sub
' ------------------------------- Form1 -------------------------------
Avatar billede cronck Nybegynder
01. december 2004 - 23:18 #7
Nu tænkte jeg på hvordan forbindelsen til databasen oprettes... Hvor skal jeg for eks. skrive db'ens 'sti+filnavn' ?
Avatar billede sjh Nybegynder
01. december 2004 - 23:21 #8
hvis du nu lige ser på de svar jeg har sendt..

  strPass = "password"
  strPath = App.Path & "\database.mdb"
Avatar billede cronck Nybegynder
01. december 2004 - 23:37 #9
Ahh... Det havde jeg ikke lige bemærket... ;-)

Jeg tester det en af de kommende dage, da jeg er igang med nogle småting fordi at jeg tror at min ene hdd er lige på kanten til at stå af... :-/
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester