DevHB
Mitglieder-
Gesamte Inhalte
170 -
Benutzer seit
-
Letzter Besuch
Über DevHB
- Geburtstag 04.12.1981
-
Crysis 32bit Vista
DevHB antwortete auf Maulwurf_der_Schlaue's Thema in Gaming Club's Allgemeine Themen
-
Sehr gut Finde ich auch richtig.
-
Hi, ersteinmal schmeiß das ADODC wieder raus, denn gebundene Steuerelemente bringen nur Ärger und Du lernst dabei nix! Zudem hast Du ja schon den richtigen Anfang mit ADODB.Recordst und Connection gemacht, brauchst also das ADODC nicht mehr. Zur Fehlermeldung: Die sagt klar und deutlich aus, was falsch ist, nämlich der Tabellenname, sprich die Tabelle heißt anders oder ist gar nicht vorhanden. Private Sub Form_Load() ' \\\ Öffnen der Connection (Datenbank öffnen) strFileName = "C:\Dokumente und Einstellungen\ljunginger\Desktop\WWM\FrageDB.mdb" CursorLocation = adUseClient Set Cnn = New ADODB.Connection With Cnn .Provider = "Microsoft.Jet.OLEDB.4.0" .Properties("Data Source") = strFileName If CommandTimeOut > 0 Then .CommandTimeOut = CommandTimeOut End If If Len(strDBPassword) Then .Properties("Jet OLEDB:Database Password") = strDBPassword End If If CursorLocation <> 0 Then .CursorLocation = CursorLocation End If .Properties("Persist Security Info") = False .Open End With 'unnötig: If (Cnn.State And adStateOpen) = adStateOpen Then ' funktioniert auch so: If Cnn.State = adStateOpen Then ' \\\ Öffnen des Recordsets strSQL = "Select * From tblFragen" CursorType = adOpenDynamic LockType = adLockOptimistic Set RS = New ADODB.Recordset With RS Set .ActiveConnection = Cnn .Source = strSQL .CursorType = CursorType .CursorLocation = CursorLocation .LockType = LockType .Properties("IRowsetIdentity") = True .Open End With 'unnötig: 'If (RS.State And adStateOpen) = adStateOpen Then ' funktioniert auch so: If RS.State = adStateOpen Then ' ******************************************* ' hier erhält Dein DataControl nun _ einen Verweis auf das Recordset ' brauchst du nicht mehr ' Set Adodc.Recordset = RS ' ******************************************* ' ******************************************* ' Du kannst Deine Controls aber genausogut _ gleich direkt an das Recordset binden, ohne _ überhaupt ein DataControl zu verwenden. ' ******************************************* ' \\\ Recordset z.B. an ein DataGrid binden Set DataGrid.DataSource = RS ' \\\ Recordset z.B. an Textboxen binden '' txtX(0).DataField = RS.Fields(0).Name '' txtX(1).DataField = RS.Fields(1).Name '' '' '' Set txtX(0).DataSource = RS '' Set txtX(1).DataSource = RS End If End If End Sub Ich würde zudem, zumindest unter VB 6, wie gesagt keine gebundenen Controls verwenden. Schreib Dir eine Methode, die Dein Recordset durchläuft und die Daten über "Rs.Fields("FeldName").Value" in die entspr. Steuerelemente setzt. Schau Dir dies Beispiel mal an: http://www.activevb.de/cgi-bin/upload/download.pl?id=2444
-
Hi, ein paar Stichwörter: - OleDBConnection - OleDBCommand - OleDBDataAdapter - OleDBDataReader - DataSet Zugreifen tust Du auf die Access Datenbank über die OleDBConnection. Ansonsten schau mal hier: C# Station - ADO.NET Tutorial Oder hier: OLE DB Tutorial Ansonsten ist google mit den richtigen Stichwörtern Dein Freund: Google: C# Access oledb tutorial
-
Gar nicht richtig gelesen, wie geil...
-
@MarcusLe: Da hast Du natürlich recht, vergessen zu schreiben.
-
Oder nimm den .NET Provider von Oracle (ODP.NET), dann haste eine OracleConnection, OracleCommand usw... http://www.oracle.com/technology/tech/windows/odpnet/index.html
-
Moin, hmm, kann das Verhalten nicht nachvollziehen, eventuell hilft der entspr. Code weiter. Wenn ich bei "Listview_Click" auf das SelectedItem reagiere, funktioniert es tadellos, ebenso bei Multiselect =True.
-
Hi, wie sieht der Code fürs Auslesen der Zeile aus? Findet eine Überprüfung auf "SelectedItem" statt?
-
So, TExt wäre zu lang, hier die Sortierung: Sortieren kannst Du dann mit folgender Funktion: Public Enum lvwSortType SortText = 0 SortNumeric = 1 SortDate = 2 SortHHMM = 3 SortHHMMSS = 4 SortFileDateTime = 5 End Enum Public Sub MultiSortListView(ByVal Index As Integer, ByVal CurrentListView As ListView, Optional vSortType As lvwSortType = SortText) Dim i As Integer Dim strFormat As String Dim strData() As String Dim lRet As Long On Error GoTo ErrorHandler ' Benutzerdefinierter Formatstring für die ' Format-Funktion ermitteln. Select Case vSortType ' Wenn vSortType = SortText, Standard Sortierung ' nach String erzwingen und die Sub verlassen. Case SortText With CurrentListView .SortKey = Index .Sorted = True .SortOrder = 1 - .SortOrder Exit Sub End With ' Formatstring für numerische Sortierung setzen Case SortNumeric strFormat = String(30, "0") & "." & String(30, "0") ' Formatstring für Sortierung nach Datum setzen Case SortDate strFormat = String(2, "0") & "." & String(2, "0") & "." & String(4, "0") ' Formatstring für Sortierung nach Zeit HHMM setzen Case SortHHMM strFormat = "hh:mm" ' Formatstring für Sortierung nach Zeit HHMMSS setzen Case SortHHMMSS strFormat = "hh:mm:ss" ' Formatstring für Sortierung nach FileDateTime setzen Case SortFileDateTime strFormat = String(2, "0") & "." & String(2, "0") & "." & String(4, "0") strFormat = strFormat & " " & "hh:mm:ss" ' Falscher, bzw. ungültiger SortType, dann Sub verlassen Case Else Exit Sub End Select ' Automatische Aktualisierung des Fensters sperren lRet = modWinAPI.LockWindowUpdate(CurrentListView.Parent.hwnd) If lRet = 0& Then Call MsgBox("Can't lock window " & _ CurrentListView.Parent.hwnd, _ vbOKOnly + vbCritical) Exit Sub End If With CurrentListView With .ListItems If (Index > 0) Then ' Sortierung nach Subitems For i = 1 To .Count With .Item(i).ListSubItems(Index) ' Sichern des aktuellen Wertes der ' Text-Eigenschaft in der Tag-Eigenschaft, ' ohne einen evtl. Inhalt der Tag-Eigenschaft ' zu überschreiben .Tag = .Text & vbNullChar & .Tag Select Case vSortType Case SortNumeric ' Falls die Text-Eigenschaft der SubItems ' eine Zahl ist, so formatiere mit dem oben ' definierten Formatstring. If IsNumeric(.Text) Then .Text = Format$(CDbl(.Text), strFormat) End If Case SortDate ' Falls die Text-Eigenschaft der SubItems ' ein Datum ist, so formatiere mit dem oben ' definierten Formatstring. If IsDate(.Text) Then .Text = Format$(CDate(.Text), strFormat) End If Case SortHHMM ' Falls die Text-Eigenschaft der SubItems ' Zeit HH:MM ist, so formatiere mit dem oben ' definierten Formatstring. .Text = Format$(.Text, strFormat) Case SortHHMMSS ' Falls die Text-Eigenschaft der SubItems ' Zeit HH:MM:SS ist, so formatiere mit dem oben ' definierten Formatstring. .Text = Format$(.Text, strFormat) Case SortFileDateTime ' Falls die Text-Eigenschaft der SubItems ' VB FileDateTime ist, so formatiere mit dem oben ' definierten Formatstring. .Text = Format$(.Text, strFormat) End Select End With Next i Else ' Sortierung nach Mainitem For i = 1 To .Count With .Item(i) ' Sichern des aktuellen Wertes der ' Text-Eigenschaft in der Tag-Eigenschaft, ' ohne einen evtl. Inhalt der Tag-Eigenschaft ' zu überschreiben .Tag = .Text & vbNullChar & .Tag Select Case vSortType Case SortNumeric ' Falls die Text-Eigenschaft der SubItems ' eine Zahl ist, so formatiere mit dem oben ' definierten Formatstring. If IsNumeric(.Text) Then .Text = Format$(CDbl(.Text), strFormat) End If Case SortDate ' Falls die Text-Eigenschaft der SubItems ' ein Datum ist, so formatiere mit dem oben ' definierten Formatstring. If IsDate(.Text) Then .Text = Format$(CDate(.Text), strFormat) End If Case SortHHMM ' Falls die Text-Eigenschaft der SubItems ' Zeit HH:MM ist, so formatiere mit dem oben ' definierten Formatstring. .Text = Format$(.Text, strFormat) Case SortHHMMSS ' Falls die Text-Eigenschaft der SubItems ' Zeit HH:MM:SS ist, so formatiere mit dem oben ' definierten Formatstring. .Text = Format$(.Text, strFormat) Case SortFileDateTime ' Falls die Text-Eigenschaft der SubItems ' VB FileDateTime ist, so formatiere mit dem oben ' definierten Formatstring. .Text = Format$(.Text, strFormat) End Select End With Next i End If End With ' Sortiere die umformatierten Spalten neu .SortKey = Index .Sorted = True .SortOrder = 1 - .SortOrder With .ListItems If (Index > 0) Then ' Sortierung nach SubItem For i = 1 To .Count With .Item(i).ListSubItems(Index) ' Extrahiere den ursprünglichen Inhalt des ' Subitems aus der Tag Eingeschaft und ' stelle ihn wieder in die Text-Eigenschaft ' ein. strData = Split(.Tag, vbNullChar) .Text = strData(0) .Tag = strData(1) End With Next i Else ' Sortierung nach MainItem For i = 1 To .Count With .Item(i) ' Extrahiere den ursprünglichen Inhalt des ' Subitems aus der Tag Eingeschaft und ' stelle ihn wieder in die Text-Eigenschaft ' ein. strData = Split(.Tag, vbNullChar) .Text = strData(0) .Tag = strData(1) End With Next i End If End With End With ' Aufheben der Aktualisierungssperre für das Fenster lRet = modWinAPI.LockWindowUpdate(0&) Exit Sub ErrorHandler: lRet = modWinAPI.LockWindowUpdate(0&) Call MsgBox("Runtime error " & Err.Number & ": " & _ vbCrLf & Err.Description, vbOKOnly + vbCritical) End Sub Aufruf im ColumnClick Event vom Listview: Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader) ' Dim nIndex As Integer nIndex = ColumnHeader.Index - 1 ' auswahl ob text, numeric, date Select Case nIndex Case 0, 1, 2, 3, 4: Call MultiSortListView(nIndex, ListView1, lvwSortType.SortText) End Select End Sub
-
Hi, das ListView muss händisch gefüllt werden, z.B. mit einem ADO Recordset. So sieht bei mir eine Füllroutine aus: Public Sub lvwFill(ByRef Rs As ADODB.Recordset, _ ByRef Lvw As MSComctlLib.ListView _ ) Dim li As MSComctlLib.ListItem Dim i As Long, _ lRet As Long With Lvw ' listview sperren (flackern unterbinden) lRet = modWinAPI.LockWindowUpdate(Lvw.hwnd) If (Not (modWinAPI.LockWindowError(lRet))) Then Exit Sub End If .Visible = False Call .ListItems.Clear Call .ColumnHeaders.Clear .FullRowSelect = True .MultiSelect = False .GridLines = True .LabelEdit = lvwManual .View = lvwReport ' add column header For i = 0 To Rs.Fields.Count - 1 Call .ColumnHeaders.Add(, , Rs.Fields(i).Name) Next i For i = 1 To .ColumnHeaders.Count Select Case i Case 1: .ColumnHeaders(i).Alignment = lvwColumnLeft .ColumnHeaders(i).Width = 800 Case 5, 6, 7: .ColumnHeaders(i).Alignment = lvwColumnCenter Case 2, 3, 4: .ColumnHeaders(i).Alignment = lvwColumnLeft Case 8: .ColumnHeaders(i).Width = 0 End Select Next i If (Rs.RecordCount = 0) Then .Visible = True Set li = Nothing Call OptimizeWidth(Lvw, 1, Lvw.ColumnHeaders.Count - 1) Lvw.ColumnHeaders(9).Width = 0 Lvw.ColumnHeaders(10).Width = 0 lRet = modWinAPI.LockWindowUpdate(modWinAPI.LOCKWINDOW_UNLOCK) Exit Sub End If Call Rs.MoveFirst Do While (Not (Rs.EOF)) Set li = .ListItems.Add(, Rs.AbsolutePosition & "x", GetText(Rs.Fields(0).Value)) li.SubItems(1) = GetText(Rs.Fields(1).Value) li.SubItems(2) = GetText(Rs.Fields(2).Value) li.SubItems(3) = GetText(Rs.Fields(3).Value) li.SubItems(4) = GetText(Rs.Fields(4).Value) li.SubItems(5) = GetText(Rs.Fields(5).Value) li.SubItems(6) = GetText(Rs.Fields(6).Value) li.SubItems(7) = GetText(Rs.Fields(7).Value) li.SubItems(8) = GetText(Rs.Fields(8).Value) li.SubItems(9) = GetText(Rs.Fields(9).Value) Call Rs.MoveNext Loop .Visible = True Call .Refresh End With Call Rs.MoveFirst Set li = Nothing Call OptimizeWidth(Lvw, 1, Lvw.ColumnHeaders.Count - 1) Lvw.ColumnHeaders(9).Width = 0 Lvw.ColumnHeaders(10).Width = 0 ' Listview entsperren ' lRet = modWinAPI.LockWindowUpdate(modWinAPI.LOCKWINDOW_UNLOCK) End Sub Wobei "OptimizeWidth, LockWindowUpdate" nur Funktionen mit API Aufruf sind (erstmal nicht so wichtig).
-
Hi, so, da haben wirs ja schon Das sind dann die Steuerelemente aus der Forms2 Lib. Access hat kein VB, sondern VBA. So wie es aussieht, gibt es keine Boardmöglichkeiten darauf zuzugreifen. Eventuell gehts mit API, Cursor auslesen usw, aber denke mal zu aufwendig. Frage: Warum kein ListView, damit gehts ohne Probleme?
-
Hi, von VBS habe ich keine Ahnung.
-
Hi, kann ich nicht nachvollziehen, habe eine ListBox auf der Form, das Einzige was ich habe ist "List1.Columns". Bist Du in Visual Studio oder einer OfficeAnwendung? Woher kommt die ListBox (standardcontrols oder andere Lib) ?
-
Hi, eine Listbox hat keine Überschriften, meinst Du das ListView? Laut MSDN sind die Columns für die Scrollfunktion.