expertenaustausch > microsoft.* > microsoft.vb.datenbank

Susanne Burbach (22.07.2003, 09:21)
Guten Morgen NG,

ich würde gerne Hierarchische Recordsets in entweder 2 DataGrids füllen oder
aber 1 MSHFlexGrid nutzen. Jedoch finde ich nur Erläuterungen dies über den
DataEnvironment-Designer zu tun, und möchte diesen nicht nutzen.

Hat jemand ein Codebeispiel damit ich den Anfang schonmal schaffen kann?

Vielen Dank
Susanne Burbach
Peter Fleischer (22.07.2003, 09:43)
Susanne Burbach wrote:
....
> ich würde gerne Hierarchische Recordsets in entweder 2 DataGrids
> füllen oder aber 1 MSHFlexGrid nutzen. Jedoch finde ich nur
> Erläuterungen dies über den DataEnvironment-Designer zu tun, und
> möchte diesen nicht nutzen.
> Hat jemand ein Codebeispiel damit ich den Anfang schonmal schaffen
> kann?


Susanne,
willst du lokal arbeiten oder die Daten aus einer Datenbank holen?

Lokal könnte das so aussehen:

Set rs2 = New ADODB.Recordset
rs2.ActiveConnection = "provider=msdatashape;data provider=none;"
strSQL = " SHAPE APPEND New adInteger As ID," & _
" New adVarChar(50) As Schecknummer," & _
" New adVarChar(10) As Kontonummer," & _
" New adVarChar(8) As Bankleitzahl," & _
" New adVarChar(10) As Anzeige1," & _
" ((SHAPE APPEND New adInteger As FK," & _
" New adVarChar(100) as NameVorname," & _
" New adVarChar(10) as Zahlbetrag)" & _
" RELATE ID TO FK) as L3"
rs2.Open strSQL, , adOpenStatic, adLockOptimistic

Das Ganze dann füllen:

Do Until rs1.EOF
With rs2
.AddNew
!Id = rs1!Id
!Schecknummer = rs1!Schecknummer
!Kontonummer = rs1!Kontonummer
'...
Z1 = True
Set rs3 = rs2("L3").Value
Do While Z1
rs3.AddNew
rs3!FK = rs2!Id
rs3!NameVorname = rs1("NameVorname")
'...
rs3.Update
rs1.MoveNext
If rs1.EOF Then
Z1 = False
Else
Z1 = (!Bankleitzahl = Format(rs1!Bankleitzahl, "00000000"))
And (!Kontonummer = rs1!Kontonummer)
End If
Loop
!Anzeige1 = Format$(SumBetrag, "Currency")
.Update
End With
Loop
Susanne Burbach (22.07.2003, 10:03)
hallo peter,

sorry, hatte ich vergessen. ich arbeite mit Access und habe die Daten in
verschiedenen Tabellen.

Danke und Gruss
Susanne

"Peter Fleischer" <peter.Fleischer_nospam_> schrieb im Newsbeitrag
news:84d1
[..]
Susanne Burbach (23.07.2003, 09:04)
Hallo Peter,

ich schaff's irgendwie nicht...

Also, ich habe 2 Tabellen in denen die Felder KursNr, LfdNr, Halbjahr den
Index bilden und miteinander verknüpft sind. Nun habe ich meinen SQL-Befehl
anhand Deiner Anweisung gebaut aber er läuft auf Fehler:

SQL = "SHAPE {SELECT * FROM Planung}" & _
" APPEND ((({SELECT * FROM Anmeldung} AS Cmd2" & _
" RELATE KursNr TO ZKursNr)" & _
" RELATE LfdNr TO ZLfdNr)" & _
" RELATE Halbjahr TO ZHalbjahr)"

habe ich es denn so richtig gemacht? Bedeutet dies das er alle Zeilen sucht
die eben in diesen 3 Feldern übereinstimmen? Wie kann ich hier noch eine
Abfrage z.B. auf das Halbjahr="2/2003" einbauen?

Was ich möchte ist doch, das ich z.b. ein Form mit 2 Datagrids habe, im
oberen Grid z.b. die werte aus der Tabelle Planung anzeige, und wenn ich
dort einen Eintrag anklicke, im unteren Grid die Werte aus der Tabelle
Anmeldung dazu anzeige. Evtl. ist der Weg über das hierarchische Recordset
auch der falsche um dies zu lösen? Wäre ein anderer Weg evtl. besser oder
einfacher?

Vielen Dank für deine hilfe
Susanne

"Peter Fleischer" <peter.Fleischer_nospam_> schrieb im Newsbeitrag
news:glj3
[..]
Peter Fleischer (23.07.2003, 22:18)
Susanne Burbach wrote:
....
> Also, ich habe 2 Tabellen in denen die Felder KursNr, LfdNr, Halbjahr
> den Index bilden und miteinander verknüpft sind. Nun habe ich meinen
> SQL-Befehl anhand Deiner Anweisung gebaut aber er läuft auf Fehler:
> SQL = "SHAPE {SELECT * FROM Planung}" & _
> " APPEND ((({SELECT * FROM Anmeldung} AS Cmd2" & _
> " RELATE KursNr TO ZKursNr)" & _
> " RELATE LfdNr TO ZLfdNr)" & _
> " RELATE Halbjahr TO ZHalbjahr)"
> habe ich es denn so richtig gemacht? Bedeutet dies das er alle Zeilen
> sucht die eben in diesen 3 Feldern übereinstimmen?


Susanna,
wenn du eine Beziehung zwischen den Ebenen bei Übereinstimmung mehrerer
Felder haben willst, musst du die Beziehungen aufzählen (kommagetrennt):

SQL = "SHAPE {SELECT * FROM Planung}" & _
" APPEND ({SELECT * FROM Anmeldung} AS Cmd2" & _
" RELATE KursNr TO ZKursNr," & _
" RELATE LfdNr TO ZLfdNr," & _
" RELATE Halbjahr TO ZHalbjahr)"

> Wie kann ich hier
> noch eine Abfrage z.B. auf das Halbjahr="2/2003" einbauen?


Auf welcher Ebene willst du abfragen? Wenn auf der oberen Ebene (bei dir
"Planung"), dann könnte die SQL-Abfrage so aussehen:

SQL = "SHAPE {SELECT * FROM Planung WHERE Halbjahr=""2/2003""}" & _
" APPEND ({SELECT * FROM Anmeldung} AS Cmd2" & _
" RELATE KursNr TO ZKursNr," & _
" RELATE LfdNr TO ZLfdNr," & _
" RELATE Halbjahr TO ZHalbjahr)"

Wenn das "Halbjahr" nicht in dieser Form in der Tabelle vorliegt, kannt du
in der Abfrage auch z.B. die DatePart-Funktion nutzen (wenn sie der Provider
versteht).

> Was ich möchte ist doch, das ich z.b. ein Form mit 2 Datagrids habe,
> im oberen Grid z.b. die werte aus der Tabelle Planung anzeige, und
> wenn ich dort einen Eintrag anklicke, im unteren Grid die Werte aus
> der Tabelle Anmeldung dazu anzeige. Evtl. ist der Weg über das
> hierarchische Recordset auch der falsche um dies zu lösen? Wäre ein
> anderer Weg evtl. besser oder einfacher?


Wenn ich es richtig verstenden habe, dann ist das schon der richtige und
einfachste Weg, der so aussehen könnte:

Dim cn As New ADODB.Connection
Dim rs1 As New ADODB.Recordset
Dim rs2 As New ADODB.Recordset

cn.ConnectionString = "Provider=MSDataShape;" & _
"Data Source=" & "c:\temp\test.mdb;& _
"Data Provider=MICROSOFT.JET.OLEDB.4.0"
cn.Open
strSQL = "SHAPE {SELECT * FROM Planung" & _
" WHERE Halbjahr=""2/2003""}" & _
" APPEND ({SELECT * FROM Anmeldung} AS Cmd2" & _
" RELATE KursNr TO ZKursNr," & _
" RELATE LfdNr TO ZLfdNr," & _
" RELATE Halbjahr TO ZHalbjahr)"

rs1.Cursorlocation = adUseClient
rs1.Open strSQL, cn, adOpenStatic, adLockOptimistic
Set DataGrid1.DataSource = rs1
Set rs2 = rs1("Cmd2").Value
Set DataGrid2.DataSource = rs2

Peter
Ähnliche Themen