vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB & Datenbanken
Tabellen mit Bearbeitungsfunktion (wie in Access) 
Autor: Seiffer
Datum: 16.12.04 08:42

Hallo, ich hab eine bestehende Access-Anwendung, die nun durch MS SQL-Server und vB-Frontend abgelöst werden soll. Eine direkt Konvertierung der Formulare ist nicht möglich, das weiß ich schon mal.
Die normalen Funktionalitäten eines Formulars sind ja auch in vB keine Problem.
Die Daten werden über mehrere Recordsets eingelesen.

Wie bilde ich nun ein Access-Unterformular (Datenblatt~Tabelle) in vB ab?
Folgendes soll möglich sein:
- Hinzufügen von Zeilen
- Löschen von Zeilen
- Ändern von Werten innerhalb der Zeilen (inklusive Nachschlagliste / Kombinationsfeld etc...)
- Schreiben der Daten in eine SQL-Tabelle (geht bei ADO, ist eine andere Tabelle als für die Datenherkunft)


Also alles das, was in Access oder in SAP oder wo auch immer möglich ist.
Bis jetzt habe ich nur MS FlexGrid als Lösung gefunden, erscheint mir aber alles sehr umständlich. Gibt es keine andere Möglichkeit?

Danke und Gruß
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tabellen mit Bearbeitungsfunktion (wie in Access) 
Autor: Zero-G.
Datum: 16.12.04 09:55

Hallo Seiffer

Also - es gibt prinzipiell mehrere Möglichkeiten - wenn Du VB Eigene Tools benutzen möchtest, hast Du schon richtig das MS-FlexGrid angesprochen. Nochdazu gibt es das DataGrid. - Beide haben Ihre Vorzüge, aber auch Nachteile.

Im Prinzip ist es so, dass Du mit VB eine Individuellere Möglichkeit hast. Soll bedeuten, dass Du unabhängiger agieren kannst - hast aber mehr Aufwand.

Was mich am Flex Grid oder DataGrid stört, ist die Tatsache, dass Du nicht weißt was im Hintergrund abläuft. Was wiederum den Nachteil hat, daß Du nie weißt wo ein Problem verborgen sein kann.

Also mein Tipp an Dich: - Zieh Dir ein DataGrid auf ein neues Formular und mach darunter noch mal alle Felder als Textfelder, ComboBoxen - oder was auch immer Du brauchst - schalte alle Änderungsfunktionen vom DataGrid ab - nur bei einem Doppelclick in ein Feld sollen dann alle Textfelder, Comboboxen & so weiter gefüllt werden. - Dort kann man es dann ändern, neu anlegen oder löschen. - Dafür gibt es dann Buttons - Somit kannst Du alle Änderungen wunderbar nachvollziehen, kannst per SQL alles unter Kontrolle halten und bist nicht auf Windows interne Funktionen angewiesen. - Du bist also mit so einer Lösung immer in der Lage schnell & ohne zu überlegen in die Vorgehensweise des Programms einzugreifen.

mfg - Viel Spass bei der Umsetzung
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tabellen mit Bearbeitungsfunktion (wie in Access) 
Autor: Seiffer
Datum: 16.12.04 19:27

Danke schonmal,

vielleicht ein bißchen Beispiel zur Verfügung. Denn da ich eigentlich eher in SAP unterwegs bin hab ich natürlich von vB nicht soviel Ahnung, insbesondere DataGrids kenn ich noch gar nicht...

Wäre auf jeden Fall sehr nett...

Email-Adresse gibts wenn etwas vorhanden ist per privater Nachricht.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tabellen mit Bearbeitungsfunktion (wie in Access) 
Autor: Seiffer
Datum: 17.12.04 11:05

Geht hier kein eidtieren eines Beitrags? Das ist aber schade...

Also ich hab es jetzt soweit mal eingabut, ist ja mit einem Data Grid sehr einfach (man braucht ja fast nichts zu machen...)

Ich möchte die Änderungen erst bei expliziter Freigabe durch den Benutzer auf die Datenbank schreiben, deshalb müsste ich die Daten im DataGrid erst temporär speicern und bei Betätigen der Funktion speicerhn aus dem Recordset des Data Grids auf die Datenbank schreiben.

Das Recordset, welches DataSource des DataGrids ist, sollte:

1) Alle Felder der Datenbanktabelle bis auf die beiden Schlüsselfelder anzeigen und änderbar lassen.
--> Habe ich gelöst durch
   With frmKundenstammdetails.dbgPartner
        .Columns("Debitor").Width = 0
        .Columns("PaNo").Width = 0
    End With
Natürlich kann man hier auch mit visible = false arbeiten, aber so geht es ja auch...

2) Diese Schlüsselfelder sollen beim Anlegen eines neuen Satzes ermittelt und zugewiesen werden.
--> sollte doch eigentlich in etwa so gehen?!
Private dbgPartner_BeforeInsert()
    dbgPartner.Columns("Debitor").Value = Trim(txtDebitor)
    dbgPartner.Columns("Pa_No").Value =   rsMax.fields("RecMax")  ' höchste Nr
End Sub
3) Ich möchte die Änderungen erst bei expliziter Freigabe durch den Benutzer auf die Datenbank schreiben, deshalb müsste ich die Daten im DataGrid erst temporär speicern und bei Betätigen der Funktion speicerhn aus dem Recordset des Data Grids auf die Datenbank schreiben. Kann ich also ein Recorset anlegen und zuweisen ohne Vebrindung zur Datenbank (~internes Recordset), das dieselbe Struktur wie das der Datenbank hat?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tabellen mit Bearbeitungsfunktion (wie in Access) 
Autor: Seiffer
Datum: 17.12.04 13:43

Zu Punkt 3):

Das kann zumindest teilweise mit einem Offline REcordset gelöst werden. das habe ich so definiert:

    ' Recordset aufbauen
    With rsTest
        .Fields.Append "WaID", adInteger, 4
        .Fields.Append "WaLineID", adInteger, 4
        .Fields.Append "DelDescript", adVarChar, 35
        .Fields.Append "DelMatnr", adVarChar, 18
        .Fields.Append "DelSerial", adVarChar, 20
        .Fields.Append "DelQuant", adDecimal, 5
        .Fields.Append "DelPrice", adCurrency, 8
        .Fields.Append "FailDescript", adVarChar, 35
        .Fields.Append "FailMatnr", adVarChar, 18
        .Fields.Append "FailSerial", adVarChar, 20
        .Fields.Append "FailQuant", adDecimal, 5
        .Fields.Append "FailOpHours", adDecimal, 5
        .Fields.Append "InvoiceNo", adVarChar, 10
        .Fields.Append "InvoiceDate", adDate, 8
    End With
End Function
Wie fülle ich das nun Werten aus der Datenbank und wie schreibe ich diese nachher zurück auf die Datenbank?
Ich könnte das Offline Recordset initial mit einem Loop über das normale Recordset füllen, dann das normale vorm Speichern löschen und die Werte zurückschreiben. Aber gibt es da vielleicht auch einen einfacheren Weg à la modify a from b?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tabellen mit Bearbeitungsfunktion (wie in Access) 
Autor: Zero-G.
Datum: 18.12.04 09:14

Hey Seiffer

Du bist ja von alleine schon sehr weit gekommen.

Was Du beim DataGrid nicht kannst, sind Recordset's mit normalen Texten vermischen. Das Recordset muss immer an das DataGrid gebunden werden.

Wie ich Dir schon gesagt habe - lass die Finger weg vom automatischen editieren über das DataGrid. - Mach wirklich Textboxen die sich nach anklicken der Zeile im DataGrid erst füllen. - Dann kannst Du auch Deine Benutzer eigenen Rechte leichter verwalten.

mfg
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tabellen mit Bearbeitungsfunktion (wie in Access) 
Autor: Seiffer
Datum: 19.12.04 13:56

Habs geschafft... Fülle aus dem Recordset (aus SQL-Tabellen) mittels Do While ein Offline-Recordset. Bei "Speichern" lösche ich die alte Daten und schreibe (wieder mit Do While) die Daten aus dem Offline-Recordset auf die Datenbank.

Kommt dem, was ich aus SAP kenne schon relativ nahe. Ist zwar nicht ganz so sauber (muss das Recordset vorm zurück schreiben der geänderten Daten noch mal öffnen..)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel