Fortschrittsanzeige bei DBImport

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

Moderator: Moderatoren

Antworten
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Fortschrittsanzeige bei DBImport

Beitrag von Koverhage »

Hallo,

habe öfters mal den Fall DBImport länger dauert, wenn es eine große DBF Datei ist.
Manche ungeduldige Anwender denken dann die Anwendung abgestürzt und killen diese.
Jetzt war mein Gedanke: Gibt es eine Progressbar bei DBImport ?
Nein, also Hinweis bringen das die Tabelle aktualisiert wird. Das ist ja nicht das
Problem, zusätzlich wollte ich die aktuelle RecNo() anzeigen.
Dafür würde ich die ForCondition nehmen.
Leider finde ich keine Möglichkeit, die Recno festzustellen?
Hat jemand einen Tip wie ich das lösen könnte ?

Code: Alles auswählen

oScrn := XbpStatic():new(,, { aBeginn[1], aBeginn[2]+40}, { aGroesse[1],60},, .T.)
oScrn:caption := "Bitte warten, Datentabelle wird aktualisiert"
oScrn:options := XBPSTATIC_TEXT_CENTER + XBPSTATIC_TEXT_WORDBREAK
oScrn:create()
oScrn:setColorBG(XBPSYSCLR_DIALOGBACKGROUND)
oScrn:setColorFg(GRA_CLR_BLACK)
oScrn:setFontCompoundName( "8.Arial" )
oScrn:show()

DbCreateFrom( cDbfDatei,, cStrDatei,,.t.,"dbfneu"  ) // Neue Datei erzeugen
DbImport( cTmpDbf,,fortschritt(oScrn) )

("dbfneu")->(DbCloseArea())
oScrn:destroy()

static function fortschritt(oScrn, nRecNr)
oScrn:setCaption( "Bitte warten, Datentabelle wird aktualisiert"+str(nRecNr) )
return .t.
Gruß
Klaus
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1931
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Fortschrittsanzeige bei DBImport

Beitrag von Rolf Ramacher »

Hi Klaus,

ich mache dies mit einer Static-Anzeige - aber nicht jeden Satz, sondern alle 500 Sätze bzw. 1000 Sätze
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Fortschrittsanzeige bei DBImport

Beitrag von brandelh »

Hallo Klaus,

eigentlich müsste die FOR Bedingung ja die zu importierende Datei schon ausgewählt haben,
somit müsste der Select Bereich stimmen und du kannst einfach recno() verwenden, wobei eventuell der Prozentsatz besser passt und Arbeit spart !

Code: Alles auswählen

function fortschritt(oScrn)  // STATIC KANN PROBLEME BEREITEN !
    oScrn:setCaption( "Bitte warten, Datentabelle wird aktualisiert"+str(recno()) )
return .t.
Das wird aber bei jedem Datensatz aufgerufen und daher die Aktion sehr bremsen. So wäre es besser:

Code: Alles auswählen

function fortschritt(oScrn)  
    local cRecNo := rtrim(str(recno(),10,0))
    if right(cRecNo,2)=="00" // alle 100 Sätze, "0" -> alle 10 Sätze
       oScrn:setCaption( "Bitte warten, Datentabelle wird aktualisiert"+cRecNo )
    endif
return .t.
Bei einem Prozentanzeiger müsstest du wissen wie der alte Wert war ...

Code: Alles auswählen

function fortschritt(oScrn)  
    local cRecPos := str(DbPosition(),4)+"%", nLen := len(cRecPos)
    if right(oScrn:caption,nLen) # cRecPos
       oScrn:setCaption( "Bitte warten, Datentabelle wird aktualisiert "+cRecPos )
    endif
return .t.
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14659
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Fortschrittsanzeige bei DBImport

Beitrag von Jan »

Ich hab gerade keine Hilfe zur Hand. Gibt es bei DbImport() keinen Codeblock wie bei DbIndex()? Da kann man ja im Codeblock Funktionen aufrufen, die während des Indizierens mitlaufen, also auch eine Fortschrittsanzeige. Sowas mache ich bei meinen Indexaufrufen regelmäßig.

Nur mal so ins Blaue geschossen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Fortschrittsanzeige bei DBImport

Beitrag von Manfred »

Hi Klaus,

mal ganz simpel. Baue doch einfach für den Anfang eine Funktion in den For Block ein und schaue dann mal nach, was Dir zu dem Zeitpunkt des Aufrufes alles zur Verfügung steht. Wenn Du in der Funktion stehst, kannst Du doch über den Debugger alles abfragen, was Du gerne hättest, bzw. hast und dann entsprechend später einbauen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12910
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Fortschrittsanzeige bei DBImport

Beitrag von AUGE_OHR »

den Source hast du doch in c:\ALASKA\XPPW32\Source\SYS\dbbulk.prg

Code: Alles auswählen

FUNCTION DbImport( cFile, ;            // Name fr Quelldatei
                   aFieldNames, ;      // Array mit Feldnamen
                   bFor, ;             // Codeblock fr FOR-Bedingung
                   bWhile, ;           // Codeblock fr WHILE-Bedingung
                   nNext, ;            // Anzahl Datens„tze ab nRecord
                   nRecord, ;          // Erster Datensatz zum importieren
                   lRest, ;            // Alle bis Eof()
                   cDbe, ;             // DBE fr neue Datei
                   aDbeInfo )          // Einstellungen fr DBE
aber es kommt auch auf deine DBE an ... "was" importierst du ?
gruss by OHR
Jimmy
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Fortschrittsanzeige bei DBImport

Beitrag von Koverhage »

Jimmy,

dbf und dbt
Gruß
Klaus
Antworten