Blaster2k Skrevet 4. august 2004 Del Skrevet 4. august 2004 (endret) 1. Hvordan åpner jeg en database i en list? 2. Hvordan legger jeg til data i en tabell i databasen (feks. text1 til kolonne 1 og text2 til kolonne 2) 3. Hvordan bare vise tingene i databasen som har felles ord/tall i en bestemt kolonne? 4. Hvordan søke i databasen :> Access database it is. Endret 5. august 2004 av Blaster2k Lenke til kommentar
Jonas Skrevet 4. august 2004 Del Skrevet 4. august 2004 (endret) Legg til en ListBox og denne koden: Private Sub Form_Load() List1.Clear Set db = OpenDatabase(App.Path & "\database.mdb") Set rstInfo = db.OpenRecordset("Info") If Not rstInfo.RecordCount = 0 Then With rstInfo .MoveFirst Do Until .EOF List1.AddItem !Navn .MoveNext Loop End With End If End Sub Private Sub List1_dblClick() With rstInfo .MoveFirst .Move (List1.ListIndex) .Edit MsgBox !Om End With End Sub For å edite den aktive (den som sist er åpnet med "List1_dblClick") raden kan du bruke denne koden: With rstInfo .Edit !Navn = Text1.text !Om = Text2.text .Update End With For å slette den aktive raden: rstInfo.Delete For å slette den aktive raden: With rstInfo .AddNew !Navn = Text1.Text !Om = Text2.Text .Update End With Edit: Finnes ingen ferdig lagd funksjon for å søke i databasen. Her er en meget enkel en: Dim i For i = 0 To List1.ListCount - 1 If List1.List(i) = txtSøkeord.Text Then MsgBox List1.List(i) Next i Endret 4. august 2004 av Jonas Lenke til kommentar
Blaster2k Skrevet 4. august 2004 Forfatter Del Skrevet 4. august 2004 (endret) takk Endret 4. august 2004 av Blaster2k Lenke til kommentar
Blaster2k Skrevet 4. august 2004 Forfatter Del Skrevet 4. august 2004 Set db = OpenDatabase(App.Path & "\bqdb.mdb") "Sub or function not defined" Lenke til kommentar
aadnk Skrevet 4. august 2004 Del Skrevet 4. august 2004 Set db = OpenDatabase(App.Path & "\bqdb.mdb") "Sub or function not defined" Når Option Explicit står skrevet i toppen av koden, så er variabeldeklarering helt nødvendig. Derfor må du hele tiden deklarere de variabelene hvor du får denne feilmeldingen ved. I dette tillfellet må du legge denne koden i toppen: Dim db As Object, rstInfo As Object Skulle du oppleve flere feilmeldinger er det bare å deklarere variabelen. Hvis du ikke vet hvilken type du skal deklarere til, bruker du datatypen Variant. Lenke til kommentar
Blaster2k Skrevet 5. august 2004 Forfatter Del Skrevet 5. august 2004 (endret) Får samme feilmellinga nå: Option Explicit Dim db As Object Dim tblTabell1 As Object Private Sub Form_Load() Set db = OpenDatabase(App.Path & "\bqdb.mdb") Set tblTabell1 = db.OpenRecordset("Tabell1") AddToList List1 End Sub Public Sub AddToList(ListView As Variant) On Error Resume Next tblTabell1.MoveFirst Do Until tblTabell1.EOF ListView.ListItems.Add , , tblTabell1!Navn tblTabell1.MoveNext Loop End Sub Endret 5. august 2004 av Blaster2k Lenke til kommentar
aadnk Skrevet 5. august 2004 Del Skrevet 5. august 2004 Du er også nødt til å referere DAO biblioteket til prosjektet ditt. Dette gjør du ved å velge Project, så References... og den høyeste versjonen av Microsoft DAO i listen. Avslutt ved å trykke på OK. Etter dette skulle koden fungere. Lenke til kommentar
Blaster2k Skrevet 5. august 2004 Forfatter Del Skrevet 5. august 2004 (endret) Takker og bukker. Jeg "plages" litt med søkingi ListView'en, jeg fant en kode som funket ganske bra: Private Sub Command4_Click() Dim itm As ListItem With ListView1 Set itm = .FindItem(Text1.Text, lvwText, , lvwPartial) If Not itm Is Nothing Then .ListItems(itm.Index).Selected = True .SetFocus End If End With Set itm = Nothing End Sub Men bet er mange ting i listen som begynner (og slutter med det samme) Eksempel: "bil med rød farge" <> "bil med grønn farge" Med den søkemetoden åver kan jeg ikke bare søke etter "grønn" og finne "bil med grønn farge". Og om jeg søker på "bil" så kommer bare til den første linja med som begynner med "bil", jeg vil at man skal gå til neste treff om man trykker på knappen en gang til. Noen ide'er til hvordan? Litt rotete skrevet kanskje? Endret 5. august 2004 av Blaster2k Lenke til kommentar
aadnk Skrevet 5. august 2004 Del Skrevet 5. august 2004 (endret) Hvis du også vil gjøre det mulig å søke etter tekst i selve innholdet, og ikke bare begynnelsen, kan du prøve denne funksjonen: Public Function FindItemEx(ListView As ListView, Find As String, Optional Where = "Text", Optional Index = 1, Optional Compare As VbCompareMethod = vbTextCompare) As ListItem Dim Tell As Long For Tell = Index To ListView.ListItems.Count If InStr(1, CallByName(ListView.ListItems.Item(Tell), Where, VbGet), Find, Compare) <> 0 Then Set FindItemEx = ListView.ListItems.Item(Tell) Exit Function End If Next End Function Den fungerer omtrent som FindItem funksjonen og kalles på denne måten: Set itm = FindItemEx(ListView1, Text1.Text, , lSearchIndex, vbTextCompare) Koden blir dermed slik: Private Sub Command4_Click() Dim itm As ListItem, lSearchIndex& With ListView1 lSearchIndex = .SelectedItem.Index + 1 If lSearchIndex < 3 Then lSearchIndex = 1 End If If lSearchIndex > .ListItems.Count Then lSearchIndex = .ListItems.Count End If Set itm = FindItemEx(ListView1, Text1.Text, , lSearchIndex, vbTextCompare) If Not itm Is Nothing Then .ListItems(itm.Index).Selected = True .SetFocus End If End With Set itm = Nothing End Sub Når det gjelder formateringen av koden, vil jeg anbefale deg å lese denne guiden. Lykke til! Endret 5. august 2004 av aadnk Lenke til kommentar
Blaster2k Skrevet 5. august 2004 Forfatter Del Skrevet 5. august 2004 (endret) Den søksaken der var fin, men når man har "søkt seg gjennom" lista en gang kan man ikke søke på det samme ordet igjen før man har reloadet programmet eller det som står i ListView'en (i dette tilfellet en database). (= Hvordan reloader jeg eller sier til ListView'en "det skjedd endringer i databasen, vis det!"? Eeenda et spørsmål: For å slette den aktive raden: rstInfo.Delete Vill den aktive si den som er merket? Isfall får jeg det ikke til (feilmelling -> No current record ) Huff som jeg maser Endret 5. august 2004 av Blaster2k Lenke til kommentar
aadnk Skrevet 5. august 2004 Del Skrevet 5. august 2004 Jeg endret på prosedyren sånn at den automatisk går tilbake til utgangspunktet etter den har søkt igjennom alle elementene. Her er den nåværende koden: Private Sub Command4_Click() Dim itm As ListItem, lSearchIndex& If ListView1.ListItems.Count <= 0 Then ' Ingen elementer å søke i Exit Sub End If With ListView1 lSearchIndex = .SelectedItem.Index + 1 If lSearchIndex < 3 Or lSearchIndex > .ListItems.Count Then lSearchIndex = 1 End If ' Hvis brukeren allerde har søk gjenom listen, sett den tilbake til utgangspunktet If .Tag = "NoResult" Then lSearchIndex = 1 .Tag = "" End If Set itm = FindItemEx(ListView1, Text1.Text, , lSearchIndex, vbTextCompare) If Not itm Is Nothing Then .ListItems(itm.Index).Selected = True .SetFocus Else If lSearchIndex < 2 Then ' Ingen resultater .Tag = "NoResult" Else ' Prøv å søk på ny .ListItems.Item(1).Selected = True Call Command4_Click End If End If End With ' Fri opp variabler Set itm = Nothing End Sub Når det gjelder sletting av poster i en tabell, så må du sjekke om det faktisk er flere elementer igjen å slette. Dette gjør du ved å se om både rstInfo.BOF og rstInfo.EOF er True. Da er det mest sannsynlig ikke flere resisterende poster, mens når bare en av disse er True kan du prøve å flytte gjeldende post til begynnelsen med funksjonen MoveFirst. Lenke til kommentar
Blaster2k Skrevet 6. august 2004 Forfatter Del Skrevet 6. august 2004 (endret) Nesten! Om man søker på et ord som er i den første raden, kan man ikke finne neste rad med samme ord, med å trykke på knappen igjen. Problemer med sletting: Jeg fant et eksempel og prøvde å sette koden inn i mitt prosjekt Her er koden Private Sub Command5_Click() 'SLETT SJITN ' the user wants to delete the selected record. ' if there are no records in the listview: exit sub If ListView1.ListItems.Count = 0 Then Exit Sub 'if itemindex = 0 then there is nothing selected! If ItemIndex <> 0 Then 'ok, there is something selected! 'now we will get the name from the items name, and ask for delete confirmation Dim Ask As String Ask = MsgBox("Are you sure that you want to delete '" & ListView1.ListItems.Item(ItemIndex).Text & "'?", vbYesNo + vbInformation, "Delete record") If Ask = vbYes Then 'user had pressed yes, please delete;-) 'now we have to get the ID of the row in de database (item's tag!) and delete record from table Dim db As Database Dim tblTabell1 As Recordset ' Open database bqdb.mdb (in the same path as the application files are) Set db = OpenDatabase(App.Path + "\bqdb.mdb") ' Open recordset (table: People) in database DB Set tblTabell1 = db.OpenRecordset("Tabell1") 'we will seek the record with ID equal to item's tag 'first we set the table's index (this is the ID) 'we need this because otherwise we can't use the seek function tblTabell1.Index = "ID" 'we move the recordpointer to the first record, this way we can seek the whole table tblTabell1.MoveFirst 'here we check if the seek functions result is equal to the item's tag. 'the item's tag contains the ID from the table. 'we stored it when we were reading from the table tblTabell1.Seek "=", ListView1.ListItems.Item(ItemIndex).Tag If tblTabell1.NoMatch Then 'if there was no match (the ID couldn't be found in the table) MsgBox ("The record can't be found in the table!"), vbOKOnly + vbCritical, "Error" 'we reset itemindex to 0, this means that nothing is selected in listview1 ItemIndex = 0 'close recordset and database tblTabell1.Close db.Close Exit Sub Else 'there was a match! we will now delete the record from the database tblTabell1.Delete 'and we will delete the row from the listview ListView1.ListItems.Remove (ItemIndex) End If 'close recordset and database tblTabell1.Close db.Close End If 'we reset itemindex to 0, this means that nothing is selected in listview1 ItemIndex = 0 End If End Sub Når jeg da trykker på Command5 blir det error med meldingen "'ID' is not an index in this table". Det er en kolonne i tabellen min som heter ID, hva skal jeg gjøre? By the way; jeg setter stor pris på all hjelpen dere gir og har gitt meg her Endret 6. august 2004 av Blaster2k Lenke til kommentar
Jonas Skrevet 6. august 2004 Del Skrevet 6. august 2004 (endret) Uff da .. Dumme meg .. Glemte å nevne dim'sene og referansen til DAO filen Edit: Vill den aktive si den som er merket? Isfall får jeg det ikke til (feilmelling -> No current record ) Den får du når ingen rader er aktive .. Jeg vet ikke hva du mener med "den som er merket" .. Merket i en listbox? Listbox har ingen ting å si. Det er hvilken rad i databasen som er blitt åpnet sist. Endret 6. august 2004 av Jonas Lenke til kommentar
Blaster2k Skrevet 7. august 2004 Forfatter Del Skrevet 7. august 2004 (endret) Jeg mener den forige jeg trykkte på en gang, på ListView'en. Må det plasseres noe under Private Sub ListView1_ItemClick -saken da? Endret 7. august 2004 av Blaster2k Lenke til kommentar
Jonas Skrevet 7. august 2004 Del Skrevet 7. august 2004 Dette skrev jeg i første innlegg: Private Sub List1_dblClick() With rstInfo .MoveFirst .Move (List1.ListIndex) .Edit MsgBox !Om End With End Sub Lenke til kommentar
Blaster2k Skrevet 7. august 2004 Forfatter Del Skrevet 7. august 2004 Au, at jeg ikke så det! Men uansett nå har jeg gjort det i skuffa, plutselig vill ikke tabellen vises i listviewen og jeg klarer ikke å finne ut hvorfor. *sutre* Lenke til kommentar
Jonas Skrevet 7. august 2004 Del Skrevet 7. august 2004 Lim inn koden din her så kan jeg se på den Lenke til kommentar
Blaster2k Skrevet 7. august 2004 Forfatter Del Skrevet 7. august 2004 (endret) fant bommerten Endret 7. august 2004 av Blaster2k Lenke til kommentar
Jonas Skrevet 7. august 2004 Del Skrevet 7. august 2004 Jeg har alldri vært borti ListView så jeg kan ikke se hva som er feil .. Lenke til kommentar
Blaster2k Skrevet 7. august 2004 Forfatter Del Skrevet 7. august 2004 går det ant å ha slike i en vanlig listbox?: Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå