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]=Zurck [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:
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:
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 ...
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
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.