Seite 1 von 1

set relation und fehler beim aufruf von dbedit ???

Verfasst: Mi, 04. Jun 2014 12:12
von xbaseklaus
Hallo , ich war hier schon mal angemeldet hatte aber mein passwort vergessen, und hoffe auf eure schnelle hilfe , so wie ich es hier gewohnt bin :-)

Wahrscheinlich sitze ich im moment völlig auf dem schlauch.
Mein problem:

Umstellung Clipper auf xbase CODE:

Code: Alles auswählen

...
select 8
use rechnung index tnummer
select 5
set relation to terminnr into rechnung
...
DECLARE F1 [7]
F1[1]=rechnung->rdatum      ----> hier wird nur beim ausführen des programms unter xbase eine fehlermeldung ausgegeben ! ( siehe unten )
F1[2]=verkauf1->bm1
F1[3]=verkauf1->vkp1
F1[4]=verkauf1->betrag0
F1[5]=verkauf1->artikelnr
F1[6]=verkauf1->vprodukt
F1[7]=rechnung->rnr2


DECLARE K1[7]
K1[1]="Verkaufsdatum"
K1[2]="Menge"
K1[3]="VKPreis netto"
K1[4]="VKSumme netto"
K1[5]="Artikelnummer"
K1[6]="Produktname"
K1[7]="Rechnungsnummer"

clear
@ 24,1 SAY "[ESC]=Zurück [F1]=Gesamtsumme [F2]=Drucken"
do f1 with "2"
DBEDIT(1,0,23,79,F1,"vkfedit","",K1)
do f1 with "1"
set relation to
Fehlermeldung:
Xbase++ version : Xbase++ (R) Version 1.82.306
Operating system : Windows 06.01 Build 07601 Service Pack 1
------------------------------------------------------------------------------
oError:args :
-> VALTYPE: D VALUE:
oError:canDefault : N
oError:canRetry : N
oError:canSubstitute: N
oError:cargo : NIL
oError:description : Parameter has a wrong data type
oError:filename :
oError:genCode : 2,00
oError:operation : <[1]>:=< >
oError:osCode : 0,00
oError:severity : 2,00
oError:subCode : 3,00
oError:subSystem : BASE
oError:thread : 1,00
oError:tries : 0,00
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Called from VKUEBSF(36)
Called from VKMENU(24)
Called from ZMENU(33)
Called from MAIN(434)
DANKE schonmal im voraus
mfg klaus

Re: set relation und fehler beim aufruf von dbedit ???

Verfasst: Mi, 04. Jun 2014 12:41
von Herbert
Nach dem F1 im Declare darf kein Leerzeichen stehen.
Achtung: declare erstrellt PRIVATE-Variablen.

Re: set relation und fehler beim aufruf von dbedit ???

Verfasst: Mi, 04. Jun 2014 12:48
von xbaseklaus

Code: Alles auswählen

select 8
use rechnung index tnummer
select 5
set relation to terminnr into rechnung
...

SELECT 8      <----- nach dem einfügen der Zeile läuft es jetzt durch :-)

DECLARE F1 [7]
F1[1]=rechnung->rdatum      ----> hier wird nur beim ausführen des programms unter xbase eine fehlermeldung ausgegeben ! ( siehe unten )
F1[2]=verkauf1->bm1
F1[3]=verkauf1->vkp1
F1[4]=verkauf1->betrag0
F1[5]=verkauf1->artikelnr
F1[6]=verkauf1->vprodukt
F1[7]=rechnung->rnr2

Re: set relation und fehler beim aufruf von dbedit ???

Verfasst: Mi, 04. Jun 2014 12:54
von xbaseklaus
Aber Daten werden keine in der Tabelle angezeigt :-(

Re: set relation und fehler beim aufruf von dbedit ???

Verfasst: Mi, 04. Jun 2014 13:04
von Jan
Wenn in keiner der beteiligten Tabellen irgendwelche Daten angezeigt werden: Auf welchen Datensätzen stehst Du denn da jeweils? Bist Du sicher, das Du nicht in Select 5 (ich nehme mal an, das soll verkauf1 sein) nicht z. B. auf EoF() stehst?

Jan

Re: set relation und fehler beim aufruf von dbedit ???

Verfasst: Mi, 04. Jun 2014 13:19
von brandelh
an der sichtbaren Syntax kann es nicht liegen, da dies funktioniert:

Code: Alles auswählen

procedure main
   local x
   DECLARE F1 [7], F2 [7]

   for x := 1 to 7
       F1 [x] := "F1-"+str(x,1)
       F2 [x]  = "F2-"+str(x,1)
       ? x,F1[x],F2[x]
   next

return
Anzeige:

Code: Alles auswählen


XBase2, Alink, VIO         NEU 20.09.2001
Xbase++ (R) Compiler 1.90.355 Apr 10 2009
Copyright (c) Alaska Software. All rights reserved.
File: test.prg Line:   12
test.prg(8:0): warning XBT0102: Ambiguous variable reference F1
test.prg(9:0): warning XBT0102: Ambiguous variable reference F2
test.prg(10:0): warning XBT0102: Ambiguous variable reference F1
test.prg(10:0): warning XBT0102: Ambiguous variable reference F2
File test.prg compiled successfully.
Alaska 32-Bit Linker Version 1.90.355
Copyright (c) Alaska Software 1997-2009. All rights reserved.

D:\TEST\TestDeclare> test

         1 F1-1 F2-1
         2 F1-2 F2-2
         3 F1-3 F2-3
         4 F1-4 F2-4
         5 F1-5 F2-5
         6 F1-6 F2-6
         7 F1-7 F2-7
D:\TEST\TestDeclare>
Der Parameter (das Feld) wird als Datumstyp erkannt und dann sagt die Fehlermeldung, dass dies ein ungültiger Datentyp ist.
Eine Variable und auch ein ArrayFeld haben keine vorgeschriebenen Datentypen, daher ist die Zuweisung immer erlaubt.

Könnte es sein, dass das Datumsfeld in der Datei beschädigt ist und ein ungültiges Datum an Xbase beim Lesen zurückgibt ?

kannst du die Datei mit clipper / DBU lesen ?

Re: set relation und fehler beim aufruf von dbedit ???

Verfasst: Mi, 04. Jun 2014 13:36
von xbaseklaus
Ich bearbeite meine DBF Datenbanken mit DBF Viewer 2000 und da gibt es keine Fehlermeldungen !

Normalerweise sollte er das rechnungsdatum und die zugehörigen artikel anzeigen - keine ahnung wo hier das problem liegt :-(

Hier nochmal die gesamte PROCEDURE:

Code: Alles auswählen

procedure vkuebs
#include "box.ch"
cls
select 8
use rechnung
index on rnr to tnummer
set index to tnummer
index on rdatum to vkdatum
set index to vkdatum
set scoreboard off

select 8
use rechnung index tnummer
select 5
set relation to terminnr into rechnung

clear
do uebschr with "Terminzeitraum"

clear gets
vsdat1=space(2)
vsjahr=space(4)
@4,20 to 8,56 double
@5,22 say 'Datumsauswahlkriterium eingeben:'
@7,27 say "Monat:" get vsdat1 picture "99"
@7,37 say "Jahr:" get vsjahr picture "9999"
vsdat1=month(date())
vsjahr=year(date())
read
*----------------------------zahlart F ausklammern-------------------
set filter to month(rechnung->rdatum)=(vsdat1) .and. year(rechnung->rdatum)=(vsjahr) .and. rechnung->zahlart<>"F" .and. rechnung->storno<>"S"
go top

cls
select 8
DECLARE F1 [7]
F1[1]="rechnung->rdatum"
F1[2]="verkauf1->bm1"
F1[3]="verkauf1->vkp1"
F1[4]="verkauf1->betrag0"
F1[5]="verkauf1->artikelnr"
F1[6]="verkauf1->vprodukt"
F1[7]="rechnung->rnr2"


DECLARE K1[7]
K1[1]="Verkaufsdatum"
K1[2]="Menge"
K1[3]="VKPreis netto"
K1[4]="VKSumme netto"
K1[5]="Artikelnummer"
K1[6]="Produktname"
K1[7]="Rechnungsnummer"

clear
@ 24,1 SAY "[ESC]=Zurck [F1]=Gesamtsumme [F2]=Drucken"
do f1 with "2"
DBEDIT(1,0,23,79,F1,"vkedit","",K1)
do f1 with "1"
set relation to
set scoreboard on
set filter to
return
FUNCTION vkedit
PARAMETERS Modus, Initial
Zeile=COL()
Reihe=ROW()
Rueck = 1
DO CASE

   CASE LASTKEY()=27
         Rueck=0
         clear gets
         CLs
         set cursor on

  CASE LASTKEY()=28
         do vkberechnung

  CASE LASTKEY()=-1
         do vkdruck1

endcase
return (rueck)

Re: set relation und fehler beim aufruf von dbedit ???

Verfasst: Mi, 04. Jun 2014 13:45
von xbaseklaus
sobald ich:

Code: Alles auswählen

cls
select 8

GO TOP     <------------- nach dem einfügen wieder folgende fehlermeldung

DECLARE F1 [7]
F1[1]="rechnung->rdatum"
F1[2]="verkauf1->bm1"
F1[3]="verkauf1->vkp1"
F1[4]="verkauf1->betrag0"
F1[5]="verkauf1->artikelnr"
F1[6]="verkauf1->vprodukt"
F1[7]="rechnung->rnr2"
Fehlermeldung:
------------------------------------------------------------------------------
ERROR LOG of "C:\w2014\project.EXE" Date: 04.06.2014 13:41:38

Xbase++ version : Xbase++ (R) Version 1.82.306
Operating system : Windows 06.01 Build 07601 Service Pack 1
------------------------------------------------------------------------------
oError:args :
-> VALTYPE: C VALUE: rechnung->rdatum
oError:canDefault : N
oError:canRetry : N
oError:canSubstitute: N
oError:cargo : NIL
oError:description : Parameter has a wrong data type
oError:filename :
oError:genCode : 2,00
oError:operation : <[1]>:=<rechnung...>
oError:osCode : 0,00
oError:severity : 2,00
oError:subCode : 3,00
oError:subSystem : BASE
oError:thread : 1,00
oError:tries : 0,00
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Called from VKUEBS(37)
Called from VKMENU(20)
Called from ZMENU(33)
Called from MAIN(434)

Re: set relation und fehler beim aufruf von dbedit ???

Verfasst: Mi, 04. Jun 2014 13:47
von AUGE_OHR
xbaseklaus hat geschrieben:

Code: Alles auswählen

select 8
use rechnung index tnummer
select 5
set relation to terminnr into rechnung
...

SELECT 8      <----- nach dem einfügen der Zeile läuft es jetzt durch :-)
ich nehme mal an das auf "select 5" der Alias "Verkauf1" ist ?

Frage : wie ist dein Code für den Index "tnummer" und "terminnr" ?
xbaseklaus hat geschrieben:

Code: Alles auswählen

DECLARE F1 [7]
F1[1]=rechnung->rdatum      ----> hier wird nur beim ausführen des programms unter xbase eine fehlermeldung ausgegeben ! ( siehe unten )
F1[2]=verkauf1->bm1
F1[3]=verkauf1->vkp1
F1[4]=verkauf1->betrag0
F1[5]=verkauf1->artikelnr
F1[6]=verkauf1->vprodukt
F1[7]=rechnung->rnr2
versuche mal statt " = " eine Zuweisung " := "

Re: set relation und fehler beim aufruf von dbedit ???

Verfasst: Mi, 04. Jun 2014 13:53
von xbaseklaus
wenn ich nach:

Code: Alles auswählen

set relation to terminnr into rechnung
ein: go top mache kommt folgende Fehlermeldung:

------------------------------------------------------------------------------
ERROR LOG of "C:\w2014\project.EXE" Date: 04.06.2014 13:50:32

Xbase++ version : Xbase++ (R) Version 1.82.306
Operating system : Windows 06.01 Build 07601 Service Pack 1
------------------------------------------------------------------------------
oError:args :
-> VALTYPE: C VALUE: rechnung
-> VALTYPE: B VALUE: {|| terminnr}
-> VALTYPE: C VALUE: terminnr
-> VALTYPE: U VALUE: NIL
-> VALTYPE: U VALUE: NIL
-> VALTYPE: L VALUE: .F.
oError:canDefault : Y
oError:canRetry : N
oError:canSubstitute: N
oError:cargo : NIL
oError:description : Unknown/Invalid symbol for alias
oError:filename :
oError:genCode : 66,00
oError:operation : DbSetRelation
oError:osCode : 0,00
oError:severity : 2,00
oError:subCode : 8021,00
oError:subSystem : BASE
oError:thread : 1,00
oError:tries : 0,00
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Called from VKUEBS(15)
Called from VKMENU(20)
Called from ZMENU(33)
Called from MAIN(434)

Re: set relation und fehler beim aufruf von dbedit ???

Verfasst: Mi, 04. Jun 2014 13:55
von xbaseklaus
Jan+Jimmy hat geschrieben:ich nehme mal an das auf "select 5" der Alias "Verkauf1" ist ?
JA

Re: set relation und fehler beim aufruf von dbedit ???

Verfasst: Mi, 04. Jun 2014 13:57
von AUGE_OHR
xbaseklaus hat geschrieben:Normalerweise sollte er das rechnungsdatum und die zugehörigen artikel anzeigen - keine ahnung wo hier das problem liegt :-(
Cl*pper Code Syntax stimmt nicht immer mit Xbase++ überein
xbaseklaus hat geschrieben:

Code: Alles auswählen

procedure vkuebs
#include "box.ch"
cls
select 8
use rechnung
index on rnr to tnummer
set index to tnummer                    // wozu ein SET INDEX hier ?
index on rdatum to vkdatum
set index to vkdatum                    // wozu ein SET INDEX hier ?
set scoreboard off

select 8
use rechnung index tnummer              // hier Index gesetzt

select 5                                // jetzt auf 5 ... aber WO ist dein INDEX "terminnr" ??? 
set relation to terminnr into rechnung
xbaseklaus hat geschrieben: F1[1]="rechnung->rdatum"
F1[2]="verkauf1->bm1"
F1[3]="verkauf1->vkp1"
F1[4]="verkauf1->betrag0"
F1[5]="verkauf1->artikelnr"
F1[6]="verkauf1->vprodukt"
F1[7]="rechnung->rnr2"
versuche es mal OHNE Alias-> im String

p.s. SET OPTIMIZE OFF

Re: set relation und fehler beim aufruf von dbedit ???

Verfasst: Mi, 04. Jun 2014 14:02
von AUGE_OHR
AUGE_OHR hat geschrieben:

Code: Alles auswählen

select 5                                // jetzt auf 5 ... aber WO ist dein INDEX "terminnr" ??? 
set relation to terminnr into rechnung
Korrektur ... es ist wohl das Feld "verkauf1->terminnr" gemeint.

Re: set relation und fehler beim aufruf von dbedit ???

Verfasst: Mi, 04. Jun 2014 14:28
von brandelh
dass du die Fehler erst beim Skippen erhälst, ist bei Xbase++ immer so (aus Performance Gründen), aber der Fehler liegt meist wo anders ... schau mal hier:

Code: Alles auswählen

do f1 with "1"
F1 muss bei dir eine Prozedur sein und mit declare F1 [7] versuchst du auch eine Variable mit gleichem Namen anzulegen.

Xbase++ erlaubt das nicht :!: FALSCH !

Xbase++ ist strenger ... aber ich kann den Fehler nicht provozieren.

PS: da habe ich mich wohl geirrt, auch wenn ich es nie machen würde aber das gibt keine Fehler ...

Code: Alles auswählen

procedure main
   local x, F1 := {,,,,,,}, F2 := {,,,,,,}
*   DECLARE F1 [7], F2 [7]

   for x := 1 to 7
       F1 [x] := "F1-"+str(x,1)
       F2 [x]  = "F2-"+str(x,1)
       ? x,F1[x],F2[x]
   next

   do F1

return

procedure F1
   ? "Test"
return
sprachlos ... :oops:

Re: set relation und fehler beim aufruf von dbedit ???

Verfasst: Mi, 04. Jun 2014 15:08
von xbaseklaus
Nur mal ganz kurz zur Erklärung - dieser clipper CODE ist nicht von mir ... aber ich bin der Depp der sich bereit erklär hat das ganze auf xbase zu portieren

ich habe jetz mal die

set relation UMGEKEHRT

zumindest bekomme ich jetzt Daten in der Tabelle:

Code: Alles auswählen

procedure vkuebs
#include "box.ch"
cls
select 8
use rechnung
index on rnr to tnummer
*set index to tnummer
index on rdatum to vkdatum
*set index to vkdatum
set scoreboard off

select 8
use rechnung index tnummer
select 5
use verkauf1
index on terminnr to tttnr
use verkauf1 index tttnr

select 8
use rechnung index tnummer

set relation to tnummer into verkauf1
aber auch eine neue Fehlermeldung :-(

------------------------------------------------------------------------------
ERROR LOG of "C:\w2014\project.EXE" Date: 04.06.2014 15:02:37

Xbase++ version : Xbase++ (R) Version 1.82.306
Operating system : Windows 06.01 Build 07601 Service Pack 1
------------------------------------------------------------------------------
oError:args :
-> NIL
oError:canDefault : N
oError:canRetry : Y
oError:canSubstitute: N
oError:cargo : NIL
oError:description : Unknown variable
oError:filename :
oError:genCode : 22,00
oError:operation : tnummer
oError:osCode : 0,00
oError:severity : 2,00
oError:subCode : 2000,00
oError:subSystem : BASE
oError:thread : 1,00
oError:tries : 1,00
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Called from (B)VKUEBS(22)
Called from (B)DBEDIT(0)
Called from DBEDIT(201)
Called from VKUEBS(68)
Called from VKMENU(20)
Called from ZMENU(33)
Called from MAIN(434)

Re: set relation und fehler beim aufruf von dbedit ???

Verfasst: Mi, 04. Jun 2014 15:17
von Jan
... ähm - Du machst 3x die rechnung.dbf auf in immer dem gleichen Select-Bereich? Muß ich nicht verstehen, oder?

Jan

Re: set relation und fehler beim aufruf von dbedit ???

Verfasst: Mi, 04. Jun 2014 15:24
von brandelh
zumindest diese Fehlermeldung ist leicht erklärt:
oError:operation : tnummer
laut deinem obigen Code ist tnummer keine Variable sondern der Dateinamen der Indexdatei

Code: Alles auswählen

select 8
use rechnung
index on rnr to tnummer
*set index to tnummer
index on rdatum to vkdatum
*set index to vkdatum
set scoreboard off

select 8
use rechnung index tnummer
es ist auf jeden Fall keine gute Idee zwei Indexdateien zu erstellen, aber nur eine zu öffnen ...

Auch SET EXCLUSIVE könnte ein Problem darstellen, da Clipper standardmäßig ON hat und Xbase++ OFF

auch sollte man mit NETERR() prüfen ob USE erfolgreich war ...
erst USE ... ohne Indexe, NETERR() prüfen und dann SET INDEX TO ist die sichere Methode.

Re: set relation und fehler beim aufruf von dbedit ???

Verfasst: Mi, 04. Jun 2014 15:40
von AUGE_OHR
xbaseklaus hat geschrieben:

Code: Alles auswählen

procedure vkuebs
select 5
use verkauf1 index tttnr
...
select 8
use rechnung index tnummer
set relation to tnummer into verkauf1
es müsste heissen

Code: Alles auswählen

set relation to rechnung->rnr into verkauf1
Frage : ist verkauf->terminnr = rechnung->rnr ?

Re: set relation und fehler beim aufruf von dbedit ???

Verfasst: Mi, 04. Jun 2014 15:55
von xbaseklaus
set relation to str(rnr) into verkauf1

OK so funktioniert es jetzt !!!

der knackpunkt der sache war auch , dass RNR in der einen Datenbank eine ZAHL ist und in der anderen ein CHARACTER

warum das so gemacht wurde keine AHNUNG .

Das Umschreiben des CODEs kann ja noch heiter werden .

Werde mir jetzt erstmal die Datenbankstrukturen ausdrucken und hoffen dass sowas nicht noch öfters vorkommt

VIELEN DANK erstmal an alle.



ein was hätte ich da noch:

vielleicht hat das ja schonmal jemand gemacht

wie muss der CODE verändert werden um hier ein DCPROGRESS vernünftig einzubauen:

Code: Alles auswählen

procedure ausreorg
cls
? " Vor dem Beenden werden die Datenbanken aus Sicherheitsgrümden REORGANISIERT ! "
?
? " Die REORGANISATION dauert eine kurze Zeit ! BITTE WARTEN ! "

if !file("kundnr.ntx")
use adresse1
index on field->kundnr to kundnr
endif
if !file("kundname.ntx")
use adresse1
index on field->name to kundname
endif
if !file("ktitel.ntx")
use adresse1
index on field->titel to ktitel
endif
if !file("hkundnr.ntx")
use adresse2
index on field->kundnr to hkundnr
endif
if !file("hname.ntx")
use adresse2
index on field->name to hname
endif
if !file("htitel.ntx")
use adresse2
index on field->titel to htitel
endif
if !file("Lartikel.ntx")
use lager1
index on artikelnr to Lartikel
endif
if !file("Lprodukt")
use lager1
index on produkt to Lprodukt
endif
*--------------neue lagernr------------------------------------
if !file("lnr.ntx")
use lager1
index on lagernr to lnr
endif
*---------------------------------------------------------------
if !file("terminnr.ntx")
use termin1
index on terminnr to terminnr
endif
if !file("tdat1.ntx")
use termin1
index on termin to tdat1
endif
if !file("find1.ntx")
use termin1
index on dkundnr to find1
endif

if !file("verkaufnr.ntx")
use verkauf1
index on verkaufnr to verkaufnr
endif
if !file("verktnr.ntx")
use verkauf1
index on terminnr to verktnr
endif
if !file("vartnr.ntx")
use verkauf1
index on artikelnr to vartnr
endif
*-----------------------------Verkauf1: lagernr---------------------
if !file("verklnr.ntx")
use verkauf1
index on lagernr to verklnr
endif
return
DANKE !

Re: set relation und fehler beim aufruf von dbedit ???

Verfasst: Mi, 04. Jun 2014 16:04
von Tom
wie muss der CODE verändert werden um hier ein DCPROGRESS vernünftig einzubauen:
Dafür gibt es fertige Beispiele in der eXpress++-Installation. Einfach mal nachschauen.

Re: set relation und fehler beim aufruf von dbedit ???

Verfasst: Mi, 04. Jun 2014 16:06
von AUGE_OHR
hi,

bin kein Express++ User aber mit einem native Progressbar könnte man es so machen

Code: Alles auswählen

LOCAL xMax     := 0
LOCAL nEvery   := 100
LOCAL i        := 0
   ...
   oProgress := DXE_ProgressBar():New(...)
   ...
   oProgress:Create()

   xMax     := Lastrec()
   nEvery   := INT(xMax/100)

   oProgress:Maximum := xMax
   oProgress:SetData( 1 )
   ...
   INDEX ON XXX TO YYY FOR Do_My_Progress(oProgress,nEvery,i++)


FUNCTION Do_My_Progress(oProgress,nEvery,i)
LOCAL nValue := i
   IF ((nValue) % (nEvery)) == 0
      nValue := oProgress:GetData()
      nValue += nEvery
      oProgress:SetData( nValue )
   ENDIF
RETURN .T.