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		// 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 ;-)

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() ...

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.

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.