Umstellung Warenwirtschaft

Auf dem Weg von Clipper, FoxPro u.ä. nach Xbase++

Moderator: Moderatoren

Antworten
dywalker
Rookie
Rookie
Beiträge: 9
Registriert: Mi, 12. Aug 2009 11:31

Umstellung Warenwirtschaft

Beitrag von dywalker »

Hallo zusammen,
ich lese schon eine ganze Weile hier mit, und bin von diesem Forum sehr begeister. Jetzt habe auch ich meine erste Frage.
Ich versuche gerade unsere alte Warenwirschaft von Clipper zu xbase++ zu migrieren.
Unter Clipper lief das Programm auf DOS Rechnern in einer Novellumgebung.
Ziel der Umstellung ist das Programm in einer Windowsumgebung mit SQL-Datenbanken laufen zu lassen. Ich bin jetzt soweit das das Programm auf einem Windowsrechner in einer
Novellumgebung läuft. Jetzt versuche ich gerade eine kleine .prg so zu ändern, das sie auf eine SQL Datenbank zugreift. Darüber finde ich aber leider nichts in der Hilfe noch im Forum.
Hat einer von euch eine Idee, wie ich das ganze angehen muß. Bis jetzt sind es alles .dbf und .dbt Dateien incl. .ntx Index.
Ich müsste mich jetzt erst mal an der SQL-Datenbank anmelden und die Daten auslesen.
Bin für jede Hilfe dankbar.
Gruß
daywalker
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Umstellung Warenwirtschaft

Beitrag von Martin Altmann »

Moin,
herzlich Willkommen hier und viel Erfolg bei Deiner Umstellung!
Schau Dir mal sqlexpress an - von Boris Borzic.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Umstellung Warenwirtschaft

Beitrag von Tom »

Auch von mir ein herzliches Willkommen!

"Zugriff" auf SQL-Daten/einen SQL-Server geht im Prinzip auch über die ODBCDBE von Alaska.

Was genau willst Du tun? Sollen die DBF-Tabellen in einen SQL-Server (welchen?) importiert werden oder musst Du auf Fremddaten zugreifen oder willst Du "nur" im Programm "SQL sprechen"? Letzteres geht auch mit DBFs und z.B. der ADS.
Herzlich,
Tom
dywalker
Rookie
Rookie
Beiträge: 9
Registriert: Mi, 12. Aug 2009 11:31

Re: Umstellung Warenwirtschaft

Beitrag von dywalker »

Hallo,
vielen Dank für die nette Begrüßung. Ich möchte gerne unsere dbf Dateien auf einen MSSQL Server migrieren und dadurch auch anderen Programmen zur Verfügung stellen.
SQLEpress werde ich mir mal ansehen.
Vielen Dank für eure Hilfe.

Gruß
Frank
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Umstellung Warenwirtschaft

Beitrag von Tom »

Hallo, Frank.

Wenn alles gut und nach Plan läuft <hüstel>, stellt Alaska Software zum Jahresende das "Artica"-Projekt zur Verfügung. Im Rahmen dessen sollen Xbase++-Anwendungen nahezu aufwandsfrei mit dem PostGre-Server (und nur mit diesem!) kommunizieren und SQL-Datenbanken verwalten können:

http://www.alaska-software.com/arctica

Auf PostGre können auch andere Anwendungen zugreifen, der Server kostet nichts, ist robust, schnell und sehr leistungsstark.
Herzlich,
Tom
dywalker
Rookie
Rookie
Beiträge: 9
Registriert: Mi, 12. Aug 2009 11:31

Re: Umstellung Warenwirtschaft

Beitrag von dywalker »

Hallo Tom,
da bin ich ja mal gespannt. Hört sich ja nicht schlecht an. Vielen Dank für eure Antworten.

Gruß
Frank
dywalker
Rookie
Rookie
Beiträge: 9
Registriert: Mi, 12. Aug 2009 11:31

Re: Umstellung Warenwirtschaft

Beitrag von dywalker »

Hallo Tom,
vielleicht kannst Du mir auch in einem anderen Problem helfen.
Ich benutze in meinem alten Clipper Code die Funktion keysec()

keysec(K_ESC,120,1,.T.)
KUNDEN->notiz := memoedit(KUNDEN->notiz,12,2,21,77,aendern)
keysec()
dbcommit()
dbunlock()

Das Memo-Feld wird nach 120 Sekunden geschlossen wenn keine Eingabe mehr erfolgt. Diese Funktion wird leider nicht mehr unterstützt.
Wie kann ich diese Funktion mit xbase++ abbielden? Habe verschiedenes versucht, aber leider keine Lösung gefunden.

Danke
Frank
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Umstellung Warenwirtschaft

Beitrag von Rolf Ramacher »

Hallo Frank,

ich weiß jetzt nicht was du genau machen möchtest. Denn wenn du ein GUI-Fenster mit XbpDialog() erstellst, bleibt das Fenster
solange offen, bis der anwender das Fenster schließt. Sei es über einen Button, der mit dem Close belegt ist bei activate
oder über das Kreuz.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
dywalker
Rookie
Rookie
Beiträge: 9
Registriert: Mi, 12. Aug 2009 11:31

Re: Umstellung Warenwirtschaft

Beitrag von dywalker »

Hallo Rolf,
das Programm befindet sich im reinen Textmodus. Es geht darum das das Memofenster wieder automatisch nach 2 min. geschlossen und der Datensatzt freigegeben wird, wenn der Benutzer nichts macht.

Gruß
Frank
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Umstellung Warenwirtschaft

Beitrag von Jan »

Ich könnte mir vorstellen, beim Öffnen des Memofeldes automatisch einen neuen Thread zu öffnen, der die Zeit der Inaktivität mitzählt und bei einem voreingestellten Wert das Feld wieder schließt. Der Thread selber ist nicht das Problem, nur die Interaktion wegen der Inaktivität ist etwas aufwändiger.

Grundsätzlich frage ich mich aber nach dem Sinn der Aktion. Denke bitte daran, daß unter Windows mit GUI alles "ein wenig" anders läuft als mit Clipper unter DOS. Manche lieb gewonnenen Angewohnheiten muß man einfach über Bord werfen.

Jan


OK, Du warst mit Deiner Antwort an Rolf schneller. Da gilt der Einwand der GUI natürlich nicht mehr.
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Umstellung Warenwirtschaft

Beitrag von brandelh »

Hi,

wenn du im Textmodus (memoedit ?) bist, kannst du mit SetTimerEvent()
eine Funktion in bestimmten Zeitabständen starten, diese Funktion könnte dann ein KeyBoard chr(27) senden und den SetTimerEvent() abschalten.

Wenn du nicht in memoedit sondern in einem Get stehst, wäre es eleganter einen eigenen Reader oder ReadKill() zu nutzen.
Gruß
Hubert
dywalker
Rookie
Rookie
Beiträge: 9
Registriert: Mi, 12. Aug 2009 11:31

Re: Umstellung Warenwirtschaft

Beitrag von dywalker »

Hallo,
im Moment sieht meine Procedure so aus :

Code: Alles auswählen

// Datei: ku_memo.prg

#include "inkey.ch"
#include "box.ch"
#include "std.ch"
#include "memoedit.ch"


procedure ku_notiz(aendern)
LOCAL oThr
public nkey1 := 0
public mkey1 := 0

privat ergebnis
privat s_screen := savescreen(11,0,24,79)
privat n_farbe := standard

oThr := Thread():new()
oThr :start ("Edit")

 @ 11,1 clear to 22,78
 @ 23, 0 clear to 24, 79		// Menzeile und Hilfezeile
 @ 24, 5 say "'Strg - W' zum Speichern      'ESC' zum Abbrechen"
 dispbox(11,1,22,78,B_DOUBLE) 
 set color to /W
 @ 11,23 say ">                        <"
 @ 11,24 say  " BEMERKUNGEN ZUM KUNDEN " color signal
 set color to &standard

 if iscolor() 
   set color to S/BG,S/BG
 endif
 
 if aendern
   if netrlock(15)
        KUNDEN->notiz := memoedit(KUNDEN->notiz,12,2,21,77,aendern)
     dbcommit()
     dbunlock()
   mkey1 := 1
  else
     alert(hilfe_zeile(1205))
   endif
 else   
     memoedit(KUNDEN->notiz,12,2,21,77,aendern)
 endif
 
 standard := n_farbe
 set color to &standard 
 @ 11,1 clear to 22,78 
 restscreen(11,0,24,79,s_screen)	
return 


Procedure Edit()
// LOCAL nkey1 :=0
// LOCAL mkey1 :=0

DO WHILE mkey1 = 0
 nkey1 := inkey(10)
  if nkey1 = 0
  PostappEvent (K_ESC, , , SetAppWindow())
  mkey1 := 1
  endif
ENDDO

RETURN
Es passiert folgendes:
das Memofenster geht auf und ich kann Text eingeben. Wenn ich 10 Sek. nichts mache geht es wieder zu. Drücke ich ESC geht es auch wieder zu. Das Problem ist noch, das es auch zu geht wenn ich STRG drücke und durch den neuen Thread wird das Programm sehr langsam.

Die Funktion SetTimeEvent() versuche ich mal umzusetzen.

Frank

BRANDELH ich habe mal die CODE-Tags gesetzt, damit ich besser lesen kann ;-)
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Umstellung Warenwirtschaft

Beitrag von brandelh »

Hi,

im Prinzip hast du schon alles was du brauchst, SetTimerEvent() geht wohl nicht wenn du mehrere Threads nutzt,
bin mir aber nicht sicher. Aber du hast ja in der Edit-Methode das schon umgesetzt.

Drei Sachen fielen mir auf ...

1. Code bitte immer mit den code-tags markieren:
der kleine [ CODE ] Schalter oben am Anfang und Ende gedrückt macht den Code leichter lesbar ;-)

2. Man sollte nicht direkt ins Feld schreiben:

Code: Alles auswählen

KUNDEN->notiz := memoedit(KUNDEN->notiz,12,2,21,77,aendern)
wenn du eine (besser 2) Zwischenvariable nutzt, kannst du vor dem Speichern abfragen ob überhaupt was geändert wurde.
Wenn nicht, dann sparst du einen Schreibzugriff und dbcommit(). In deinem Beispiel dürfte auch ein ESC speichern ...

3. Du nutzt postappevent() ...

Code: Alles auswählen

PostappEvent (K_ESC, , , SetAppWindow())
K_ESC ist kein Event und PostAppEvent() eigentlich nur für die GUI Oberfläche.
-> müsste es nicht KEYBOARD K_ESC heißen ?
Wäre es ein GUI Programm ist SetAppWindow() eventuell nicht das Fenster / Control das du ansprechen möchtest
und der Event wäre xbeP_Keyboard mit der ESC Taste als 1. Parameter xbeK_ESC und die Include-Datei
appevent.ch statt inkey.ch.
Gruß
Hubert
dywalker
Rookie
Rookie
Beiträge: 9
Registriert: Mi, 12. Aug 2009 11:31

Re: Umstellung Warenwirtschaft

Beitrag von dywalker »

Hallo,
ich habe jetzt PostappEvent durch KEYBOARD Chr(K_ESC) ersetzt. Funktioniert. Memoedit wird ja mit STRG+W beendet und die Änderungen gespeichert.
Wenn ich nur schon STRG drücke schließt er mir mein memoedit Fenster. Waran kann das liegen?

Danke für eure Hilfe

Frank
dywalker
Rookie
Rookie
Beiträge: 9
Registriert: Mi, 12. Aug 2009 11:31

Re: Umstellung Warenwirtschaft

Beitrag von dywalker »

Hallo,
habe jetzt noch folgendes geändert:

Code: Alles auswählen

.
.
.
        KUNDEN->notiz := memoedit(KUNDEN->notiz,12,2,21,77,aendern,"ende")
     dbcommit()
     dbunlock()
   mkey1 := 1
  else
     alert(hilfe_zeile(1205))
   endif
 else   
     memoedit(KUNDEN->notiz,12,2,21,77,aendern,"ende")
 endif
.
.
.
 

Function ende()
local nkey2 := Lastkey()
local nreturn :=ME_DEFAULT

if nkey2 = K_F10
nreturn := K_CTRL_W
endif

return nreturn	
Damit fange ich dann das STRG+W ab und leite es auf die F10 Taste um. Jetzt muß man halt zum speicher die F10 Taste drücken.
Jetzt muß ich nur nochmal wegen der Geschwindigkeit schauen.

Frank
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Umstellung Warenwirtschaft

Beitrag von brandelh »

Hi,

es ist lange her, aber ich glaube STRG wird von inkey auch als Zeichen erkannt, aber als Sonderzeichen ... somit könnte das einen Key1=0 auslösen. Besser wäre es wenn du nicht auf "keine Taste gedrückt" abfragst, sondern auf Zeit ist abgelaufen ...

Code: Alles auswählen

local nEndeTime := seconds()+10
do while .t.
    nKey := inkey(1)
    if nKey # 0
       ...
       exit // Key ausführen
    endif
    if nEndeTime < seconds()
       keyboard K_ESC
       esc
    endif
enddo
wobei ich mich jetzt frage, ob das INKEY(1) hier nicht den Tastendruck des Memoedit raubt ?

Wenn ja, sollte man lastkey() oder nextkey() nutzen ...
Gruß
Hubert
dywalker
Rookie
Rookie
Beiträge: 9
Registriert: Mi, 12. Aug 2009 11:31

Re: Umstellung Warenwirtschaft

Beitrag von dywalker »

Danke für die Hilfe,
ich lasse es jetzt erstmal so laufen, da ich ein anderes größeres Problem habe.
Ich habe ja schon im Forum gefunden, wie man den angemeldeten User in einer Windows Umgebung auslesen kann.
Kann man das auch mit den Gruppen machen? Meine Anwendung verteilt Rechte anhand der Gruppenzugehörigkeit.

Gruß
Frank
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Umstellung Warenwirtschaft

Beitrag von AUGE_OHR »

dywalker hat geschrieben:Ich habe ja schon im Forum gefunden, wie man den angemeldeten User in einer Windows Umgebung auslesen kann.
Kann man das auch mit den Gruppen machen? Meine Anwendung verteilt Rechte anhand der Gruppenzugehörigkeit.
meinst du sowas
DNSDomain : NIL
DNSDomainSuffixSearchOrder : NIL
DNSEnabledForWINSResolution : N
DNSHostName : E500
DNSServerSearchOrder : {217.237.150.205, 217.237.149.142}
DomainDNSRegistrationEnabled : N
wenn ja könnte man es WMI machen.
gruss by OHR
Jimmy
Antworten