Zum Inhalt springen

DevHB

Mitglieder
  • Gesamte Inhalte

    170
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von DevHB

  1. Sehr gut Finde ich auch richtig.
  2. 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
  3. 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
  4. @MarcusLe: Da hast Du natürlich recht, vergessen zu schreiben.
  5. 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
  6. DevHB

    listview

    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.
  7. DevHB

    listview

    Hi, wie sieht der Code fürs Auslesen der Zeile aus? Findet eine Überprüfung auf "SelectedItem" statt?
  8. 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
  9. 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).
  10. 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?
  11. 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) ?
  12. Hi, eine Listbox hat keine Überschriften, meinst Du das ListView? Laut MSDN sind die Columns für die Scrollfunktion.
  13. Oh, gar nicht gesehen, dass Du VBS meinst...:schlaf:
  14. Hi, ich denke, er meint den Verweis (Menü->Projekt->Verweise), jedoch braucht man bei VB 6 keinen FileReader. Zu der geposteten Deklaration von "Dim XXX As New XXX": Diese Deklaration sollte vermieden werden, da die Objekte nie komplett gelöscht werden (bei "Set X = Nothing"). Folgendes Bsp. erläutert dies: Private Sub Main() Dim DimAs As VBA.Collection Dim DimAsNew As New VBA.Collection Debug.Print "Collections vor dem Instanzieren:" Debug.Print vbTab & "DimAs = " & TypeName$(DimAs) Debug.Print vbTab & "DimAsNew = " & TypeName$(DimAsNew) Set DimAs = New VBA.Collection Set DimAsNew = New VBA.Collection Debug.Print "Collections nach dem Instanzieren:" Debug.Print vbTab & "DimAs = " & TypeName$(DimAs) Debug.Print vbTab & "DimAsNew = " & TypeName$(DimAsNew) Set DimAs = Nothing Set DimAsNew = Nothing Debug.Print "Collections nach dem Entladen:" Debug.Print vbTab & "DimAs = " & TypeName$(DimAs) Debug.Print vbTab & "DimAsNew = " & TypeName$(DimAsNew) End Sub Zudem würde ich statt "Public mBuch" lieber ' private member Private mBuch As Buchverwaltung ' property Public Property Set BuchProp (ByRef vData As Buchverwaltung) Set BuchProp = vData End Property Public Property Get BuchProp() As Buchverwaltung Set BuchProp = mBuch End Property Public Sub form_load() Set mBuch = New Buchverwaltung Dim text As String Dim sTitel As String Dim sAutor As String Dim tbuch As Buch Dim y As Long y = 1 Set tbuch = mBuch.GetBuch(y) ' auf Nothing überprüfen, sonst kommt ebenfalls Err 91 !!! If (Not (tBuch Is Nothing)) Then With tbuch sTitel = .Titel sAutor = .Autor End With End If text = sTitel & sAutor Call LBgesamt.AddItem(text) End Sub machen, wenn schon OOP...
  15. Hi, wenn Du davon ausgehen kannst, dass ein PDF Reader installiert ist, dann geht das mit der ShellExecute Api: 'API declare ' public im Modul, private auf form !!! Public Declare Function ShellExecute Lib "shell32.dll" Alias _ "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As _ String, ByVal lpFile As String, ByVal lpParameters As String, _ ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long ' ausdrucken Private Sub cmdPrintPDF_Click() Call ShellExecute(0, "print", "C:\Test.pdf" , vbNullString, ".", 0) End Sub
  16. DevHB

    "Struct" in Visual Basic

    Hi, das ist doch schon einiges genauer... ungefährer Aufbau (ungetestet): ' Service Type Public Type SERVICE_TYPE sName As String End Type ' Procedure Type Public Type PROCEDURE_TYPE sName As String colServices() As SERVICE_TYPE End Type ' Server Type Public Type SERVER_TYPE sName As String colProcedures() As PROCEDURE_TYPE End Type Wäre die Variante mit jeweils einem Array von entspr. Typen. Die schönere Variante ist natürlich mit Klassen, da könntest Du dann nämlich die "New_Enum" Variante einbauen, so dass Du mit Dim oServer As clsServer For Each oServer In Servers ' .... Next oServer die Server o.ä. durchlaufen kannst. Sprich, Du hast damit eine Collection für die jeweilgen Klassen implementiert (mit z.B. Servers.Add(oServer), Servers.Remove(sKey) etc) und die Types würden entfallen, da Du dann ja die Klassen hast. Mit den Types müsstest Du dann Dim i As Long sServers() = getServers For i = LBound(Servers()) To UBound(Servers()) Debug.Print Servers(i) Next i Kurz umrissen, wie man es machen kann. Nun bist Du wieder dran...
  17. DevHB

    "Struct" in Visual Basic

    Hi, Struct ist in VB Type: ' Module1 Public Type VERFAHREN_TYPE DeinEintrag As String ' oder watt weiß ich End Type Aber vielleicht beschreibst Du Dein Problem mal ein wenig genauer, denn bißchen dürftig ist das schon...
  18. DevHB

    Insert erfolgreich?

    Wieso soll er in einer neuen Technologie programmieren und alte, bald nicht mehr unterstütze Techniken benutzen? Zudem bietet doch grade ADO.NET hervorragende Methoden für den SQLServer. Ich bleibe dabei, schmeiß die Acc DB weg, beschäftige Dich gleich mit dem SQLSever.
  19. DevHB

    Verlauf leeren

    Hi, ich meinte den hier: Verlauf leeren, IE muss geschlossen sein (ActiveVB)
  20. Hi, bin FIAE, Bremen. Wir haben in Anwendung C++ programmiert und zwar mit folgenden Themen: - Grundlagen d. Synthax - Schleifen, Abfragen, Switch Case - Ein - Ausgabe (Konsolen) - Strings, Dateihandling - Arrays, Pointer etc OOP: - Grundlagen von OOP (Was ist Objekt/Klasse/Attribut/Methode?) - Vererbung, Polymorphie, Schnittstellen - abstrakte Klassen, Basisklassen, Templates - UML Zusätzlich hatten wir noch: - Testverfahren (dynamische, statische) - UnitTesting - Datenschutz / Datensicherheit Wie Du siehst haben wir das komplette Reportoire der Programmierung durchgenommen. Allerdings haben wir keine einzige Desktopanwendung programmiert.
  21. Hi, so: Dim s As String, _ sTmp As String Dim nPos As Integer s = "C:\blabla\blabla\blabla\lalal.abc" ' Position von "\" ermitteln, ' von hinten nPos = InStrRev(s, "\") ' ausdruck gefunden? If (nPos <> 0) Then sTmp = Left$(s, nPos) End If MsgBox sTmp Ungetestet, sollte aber funktionieren.
  22. DevHB

    Insert erfolgreich?

    Hi, Das ist ein falscher Ansatz. Mach das gleich mit dem SQL Server arbeiten, weil Du damit wesentlich mehr Aufgaben der DB überlassen kannst und die Art der Programmierung sich wesentlich von der Arbeit mit Access unterscheidet, Stichworte hierfür sind: StoredProcedures, Trigger. Alles was Du unter Access gemacht hast, lässt nur mit viel Aufwand auf den SQL Server übertragen, zudem ändert sich mit dem SQLServer das Programmierkonzept wesentlich ! Alleine durch SPs und Trigger, da wesentliche Aufgaben dem DBMS überlassen werden. So sollte man beim SQLServer z.B. Abfragen (egal ob INSERT, UPDATE oder DELETE) auf dem Server als SP hinterlegen und mit Parametern aus der Anwendung anstossen, Rückgabewerte/Ergebnisse event. noch verarbeiten lassen und an die Anwendung zurückgeben.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...