| |
VB & DatenbankenTabellen 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ß | |
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 | |
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. | |
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? | |
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? | |
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 | |
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..) | |
| 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 |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Neu! sevCommand 4.0
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere Infos
|