Ausgabe 1:N Relation[ERLEDIGT]

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Antworten
Benutzeravatar
e25
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 35
Registriert: Do, 22. Dez 2011 16:43

Ausgabe 1:N Relation[ERLEDIGT]

Beitrag von e25 »

Also wenn ich -->

Code: Alles auswählen

Use Invoice NEW
   INDEX ON BILLNO TO BILLNO
   SET INDEX TO BILLNO

   Use Items NEW
   INDEX ON BILLNO TO InvoiceNO
   SET INDEX TO InvoiceNO

   Select Invoice
   SET RELATION TO Invoice->BILLNO INTO Items

   DISPLAY  Invoice->BILLNO  , ;
           Invoice->STREET   , ;
           Items ->ARTICLENO   , ;
           Items ->PRICEPP ;
           For Invoice->BILLNO !="9800504" ;
           To File("C:\test.txt")

verwende dann steht in meiner Datei immer nur der 1.Datensatz welcher in der items.dbf mit der BiLLNO gefunden wird, es sollen aber 4 Datenzeilen geschrieben werden, da die BILLNO "9800504" vier mal in der items.dbf vorkommt..
Ist das hier überhaupt eine 1:N Relation was ich mache?
Ich will eigentlich alle BILLNO "9800504" aus der items.dbf in die Datei schreiben :-(
Danke
Zuletzt geändert von e25 am Fr, 13. Jan 2012 10:36, insgesamt 1-mal geändert.
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2950
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 14 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Ausgabe 1:N Relation

Beitrag von Wolfgang Ciriack »

Hallo,
m.E. stehst du auf der falschen Datenbank (invoice) und das DISPLAY zeigt dir wie gewünscht nur einen Datensatz an, da es dort ja auch nur einen gibt.
Versuch mal ein SELECT ITEMS vor dem DISPLAY.
Viele Grüße
Wolfgang
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9394
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 105 Mal
Danksagung erhalten: 364 Mal
Kontaktdaten:

Re: Ausgabe 1:N Relation

Beitrag von Tom »

Zum Verständnis von Relationen: Es gibt eine Tabelle mit einem Feldwert, der Index in einer anderen Tabelle ist. In Deinem Fall gibt es "BILLNO" in der Invoice-Tabelle und einen entsprechenden Index in der Positionendatei. Wenn Du jetzt die Relation so setzt, wie Du das getan hast, würde jede Navigation in der Auftragsdatei automatisch eine Bewegung in der Positionendatei verursachen - aber nur eine, denn es gibt keinen Grund, sich in der Positionendatei zu bewegen. Umgekehrt wird ein Schuh draus: Du suchst (oder setzt einen Scope) auf die "BILLNO" in der Positionendatei, die eine Relation auf die Auftragsdatei hat. Dadurch stehst Du mit jeder Bewegung in der Positionendatei automatisch auf dem richtigen korrespondierenden Datensatz in der Auftragsdatei, aber Du musst in der Positionendatei (!) navigieren.

Ungetestet:

Code: Alles auswählen

   nBillNo := 9800504 // Beispiel

   Use Invoice NEW
   INDEX ON BILLNO TO BILLNO
   SET INDEX TO BILLNO

   Use Items NEW
   INDEX ON BILLNO TO InvoiceNO
   SET INDEX TO InvoiceNO
   SET RELATION TO BILLNO INTO Invoice
   DbSetScope(SCOPE_BOTH,nBillNo)

   DO WHILE !Eof()
     ? Invoice->BILLNO  , ;
           Invoice->STREET   , ;
           Items ->ARTICLENO   , ;
           Items ->PRICEPP
     DbSkip(1)
   ENDDO
Herzlich,
Tom
Benutzeravatar
e25
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 35
Registriert: Do, 22. Dez 2011 16:43

Re: Ausgabe 1:N Relation

Beitrag von e25 »

Danke für die schnelle Antwort, werde es gleich probieren und Rückmeldung geben 1A.
Benutzeravatar
e25
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 35
Registriert: Do, 22. Dez 2011 16:43

Re: Ausgabe 1:N Relation

Beitrag von e25 »

Also wenn ich deinen code übernehme Tom dann bekomme ich folgende error Log
Xbase++ Version : Xbase++ (R) Version 1.90.331
Betriebssystem : Windows XP 05.01 Build 02600 Service Pack 3
------------------------------------------------------------------------------
oError:args :
-> VALTYPE: C VALUE: 9800504
-> VALTYPE: C VALUE: Bahnhofstr. 1
-> VALTYPE: C VALUE: CCPN450a
-> VALTYPE: N VALUE: 2500.00000
oError:canDefault : N
oError:canRetry : J
oError:canSubstitute: N
oError:cargo : NIL
oError:description : Zugriff auf Methode nicht erlaubt
oError:filename :
oError:genCode : 25
oError:operation : qOut
oError:osCode : 0
oError:severity : 2
oError:subCode : 4402
oError:subSystem : BASE
oError:thread : 1
oError:tries : 1
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Aufgerufen von DEFINEDBRELATION(266)
Aufgerufen von DEFINETABLES(244)
Aufgerufen von PRINTREPORT(132)
Aufgerufen von (B)CREATEMAINWINDOW(42)
Aufgerufen von MAIN(32)
Und noch was anderes mit Display TO kann ich es ja in eine Datei schreiben, wie geht das mit "?" danke..


@EDIT:
Also ich habe es jetzt so gemacht-->

Code: Alles auswählen

nBillNo := "9800504" // Beispiel

   Use Invoice NEW
   INDEX ON BILLNO TO BILLNO
   SET INDEX TO BILLNO

   Use Items NEW
   INDEX ON BILLNO TO InvoiceNO
   SET INDEX TO InvoiceNO
   SET RELATION TO BILLNO INTO Invoice
   DbSetScope(SCOPE_BOTH,nBillNo)
   DO WHILE !Eof()
   DISPLAY  Invoice->BILLNO  , ;
           Invoice->STREET   , ;
           Items ->ARTICLENO   , ;
           Items ->PRICEPP ;
          For Invoice->BILLNO ="9800504" ;
           To File("C:\\test.txt") All
   DbSkip(1)
   EndDo
Durch das setzen von -->ALL am Ende schreibt er mir alle 4 in die Datei :-) cool..
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2950
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 14 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Ausgabe 1:N Relation

Beitrag von Wolfgang Ciriack »

Und noch was anderes mit Display TO kann ich es ja in eine Datei schreiben, wie geht das mit "?" danke..

Code: Alles auswählen

set printer to "test.txt" (evtl. noch "additive" zum anhängen)
set console off
set print on
? blablabla
set print off
set console on
Viele Grüße
Wolfgang
Benutzeravatar
e25
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 35
Registriert: Do, 22. Dez 2011 16:43

Re: Ausgabe 1:N Relation[Erledigt]

Beitrag von e25 »

Danke an alle :-)
Antworten