Seite 1 von 1
Umstellung Warenwirtschaft
Verfasst: Mi, 12. Aug 2009 11:50
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
Re: Umstellung Warenwirtschaft
Verfasst: Mi, 12. Aug 2009 12:17
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
Re: Umstellung Warenwirtschaft
Verfasst: Mi, 12. Aug 2009 12:27
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.
Re: Umstellung Warenwirtschaft
Verfasst: Mi, 12. Aug 2009 12:46
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
Re: Umstellung Warenwirtschaft
Verfasst: Mi, 12. Aug 2009 12:51
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.
Re: Umstellung Warenwirtschaft
Verfasst: Do, 13. Aug 2009 6:55
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
Re: Umstellung Warenwirtschaft
Verfasst: Fr, 14. Aug 2009 8:34
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
Re: Umstellung Warenwirtschaft
Verfasst: Fr, 14. Aug 2009 10:31
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.
Re: Umstellung Warenwirtschaft
Verfasst: Fr, 14. Aug 2009 10:53
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
Re: Umstellung Warenwirtschaft
Verfasst: Fr, 14. Aug 2009 11:00
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.
Re: Umstellung Warenwirtschaft
Verfasst: Fr, 14. Aug 2009 11:19
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.
Re: Umstellung Warenwirtschaft
Verfasst: Fr, 14. Aug 2009 12:14
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 // Menzeile 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
Re: Umstellung Warenwirtschaft
Verfasst: Fr, 14. Aug 2009 12:52
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() ...
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.
Re: Umstellung Warenwirtschaft
Verfasst: Fr, 14. Aug 2009 13:08
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
Re: Umstellung Warenwirtschaft
Verfasst: Fr, 14. Aug 2009 13:45
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
Re: Umstellung Warenwirtschaft
Verfasst: Fr, 14. Aug 2009 14:01
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 ...
Re: Umstellung Warenwirtschaft
Verfasst: Mo, 17. Aug 2009 16:07
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
Re: Umstellung Warenwirtschaft
Verfasst: Mo, 17. Aug 2009 16:57
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.