Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Textdateien fest mit einem SQL-Server verbinden (https://www.delphipraxis.net/51316-textdateien-fest-mit-einem-sql-server-verbinden.html)

Ati 10. Aug 2005 12:15

Datenbank: ??? • Zugriff über: wahlweise

Textdateien fest mit einem SQL-Server verbinden
 
Mahlzeit Leute,

ich bräuchte mal eure Hilfe bei einer sehr kuriosen Sache. Ich soll ein "Analyseprogramm" über unsere Auslaufartikel erstellen. Als Auslaufartikel sind in unserem Artikelstamm spezielle Kennzeichen hinterlegt. Nun ist unser Warenwirtschaftssystem eine für sich geschlossene Sache. Wir generieren aber jede Nacht Textdateien aus unserem Warenwirtschaftssystem. Diese Textdateien haben immer den gleichen Aufbau, liegen an der gleichen Stelle im Netzwerk und haben immer den selben Namen. Ich sehe für meine Aufgabe nur ein Möglichkeit. In Access kann man ja Textdateien fest mit der Access-DB verknüpfen und so muß ich es wahrscheinlich auch mit einem SQL-Server machen (wir haben hier MS)..... nur wie??? Geht das mit einem MS-SQL-Server nicht? Muß ich einen anderen nehmen und wenn ja welchen (Freeware). Ein Versuch das mit Access zu machen ist kläglich gescheitert. Zwar funktionierte das Prog einwandfrei jedoch ist die Netzwerkbelastung zu hoch und man muß ein wenig Zeit mitbringen wenn man das Programm starten will. Also auf zu neuen Wegen.

Danke im voraus
Ati

Bernhard Geyer 10. Aug 2005 12:29

Re: Textdateien fest mit einem SQL-Server verbinden
 
Da wirst du schon einen Import definieren müssen, damit jede nach diese Textdatei in den SQL-Server importiert wird.
Sollte mit den Bordmitteln (Importfunktionalität + Taskplanung) relativ einfach möglich sein.

Ati 10. Aug 2005 12:38

Re: Textdateien fest mit einem SQL-Server verbinden
 
Habe ich schonmal angetestet... habe mich aber wohl nicht ganz klug dabei angestellt. Werde es jetzt nochmal versuchen.

Ati

Ati 10. Aug 2005 12:51

Re: Textdateien fest mit einem SQL-Server verbinden
 
Mmmh. Das mit dem Import klappt ja schonmal aber wie gehe ich die Taskplanung an?? Kann mir dabei jemand helfen. Die Hilfe (beim Server) war bisher nicht so dolle.

Ati

marabu 10. Aug 2005 12:56

Re: Textdateien fest mit einem SQL-Server verbinden
 
Hallo Ati,

auf der Konsolebene kannst du mit dem Befehl AT den windows task scheduler konfigurieren. Im GUI geht das über das Shell Object "Geplante Tasks" im Explorer.

Grüße vom marabu

Ati 10. Aug 2005 13:06

Re: Textdateien fest mit einem SQL-Server verbinden
 
@marabu ich rede von dem Taskplaner des MS-SQL-Server´s

marabu 10. Aug 2005 13:15

Re: Textdateien fest mit einem SQL-Server verbinden
 
In dem Fall ist es noch einfacher: GUI Unterstützung im Enterprise-Manager unter Verwaltung :: SQL Server-Agent :: Aufträge.

marabu

PS: Server war für mich nicht das gleiche wie SQL Server. Übrigens lässt sich die von dir gewünschte Funktionalität in Verbindung mit DTS auch über den scheduler des Betriebssystems steuern.

Ati 10. Aug 2005 13:21

Re: Textdateien fest mit einem SQL-Server verbinden
 
Habe ich so noch nicht versucht. Jedoch kann ich beim Importieren aus diesem Vorgang eine tägliche Prozedur machen..... müßte doch eigentlich auch klappen, oder?

Ati

marabu 10. Aug 2005 13:26

Re: Textdateien fest mit einem SQL-Server verbinden
 
Eigentlich egal, wo du steuerst. Wenn die Datenbank nicht läuft, dann funktioniert auch der AT-gesteuerte Import nicht.

marabu

Ati 10. Aug 2005 16:25

Re: Textdateien fest mit einem SQL-Server verbinden
 
Nächstes Problem. Er importiert das Bestandsfeld als varchar und damit läßt sich keine Summe bilden. Gibt es da einen Trick.

Ati

omata 10. Aug 2005 16:34

Re: Textdateien fest mit einem SQL-Server verbinden
 
Moin,

wenn das Feld durch den Import nicht korrekt eingelesen und angelegt wird,
vielleicht so...

SQL-Code:
SELECT SUM(CONVERT(INT, bestandsfeld))
FROM tabelle
MfG
Thorsten

marabu 10. Aug 2005 21:53

Re: Textdateien fest mit einem SQL-Server verbinden
 
Zitat:

Zitat von Ati
Er importiert das Bestandsfeld als varchar und damit läßt sich keine Summe bilden. Gibt es da einen Trick.

Jetzt wäre es gut zu wissen, wie du den Import gebaut hast.

marabu

Ati 11. Aug 2005 08:52

Re: Textdateien fest mit einem SQL-Server verbinden
 
Liste der Anhänge anzeigen (Anzahl: 2)
Guten Morgen,

da bin ich wieder. Also das mit dem Convert-Befehl scheint in die richtige Richtung zu gehen nur gibt es da eine kleine Fehlermeldung (s.Anhang). Wie die Textdateien aufgebaut sind kann man auch im Anhang sehen. So werden sie jede Nacht aufbereitet und liegen dann im Netzwerk.

Ati

marabu 11. Aug 2005 09:36

Re: Textdateien fest mit einem SQL-Server verbinden
 
Ati, beim Import deiner Daten hat der Server festgestellt, dass es Spaltenwerte gibt, die ihm eine Konvertierung nach integer unmöglich machen. Anstelle den Eingabefehler zu untersuchen und zu beheben willst du nochmal mit CONVERT probieren das zu erreichen, woran der Server offenbar schon vorher gescheitert ist?

Schau dir mal deine Daten an. In den letzten Feldern taucht gelegentlich völlig unmotiviert ein Minuszeichen auf. Und wenn wirklich "-,3" irgendwo erfasst wurde, dann dürften noch ganz andere Programme Probleme bekommen. Spätestens vor dem Import solltest du die Eingabedaten durch einen Filter laufen lassen, der (a) offensichtliche Fehler korrigiert und (b) alle Fehler protokolliert.

Grüße vom marabu

Ati 11. Aug 2005 09:53

Re: Textdateien fest mit einem SQL-Server verbinden
 
Ich habe ja versucht als Kriterium >0 zu setzen. Das wird auch angenommen nur werden trotzdem Minuswerte angezeigt. Das Zahlen wie 114,61 dabei sind hat auch seine Richtigkeit. Und die Minuswerte sind nicht "unmotiviert", sondern werden tatsächlich von unserem WAWI zugelassen. Welche Möglcihkeiten habe ich den noch einen entsprechenden Filter zu setzen.

Ati

marabu 11. Aug 2005 11:02

Re: Textdateien fest mit einem SQL-Server verbinden
 
Du verrätst mal wie du importierst und ich sage dir (wenn möglich) wie du Filtern kannst - ist das fair?

Ati 11. Aug 2005 11:13

Re: Textdateien fest mit einem SQL-Server verbinden
 
Klaro. Ich rufe mir die Hauptseite der Tabellen auf. Rechte Maustaste->alle Tasks->Daten Importieren. Datenquelle=Textdatei und diese auswählen. Lasse dann alles so außer "Erste Zeile enthält Spaltenname" das wird markiert. Trennzeichen =";" bleibt. Dann die DB wählen wohin importiert werden soll (ist ja schon eingestellt). Authentifizierung wird eingegeben. Nächste Maske ->Weiter (hatte auch hier schon versucht zu Transformieren aht aber nicht geklappt). Dann kommen die Eisntellungen das dieser Import jeden Morgen um 7.00 Uhr erfolgen soll. Alles weitere einfach -> Weiter. That´s all.

Ati

marabu 11. Aug 2005 12:20

Re: Textdateien fest mit einem SQL-Server verbinden
 
Wenn du dich durch den Assistenten geklickt hast, dann kommt vor dem Festlegen des Durchführungszeitpunktes die Seite mit dem Titel "Quelltabellen und Sichten auswählen". Bei deinem Listeneintrag in der dritten Spalte ist der Schalter für das Transformieren. Der sich dann öffnende Dialog gestattet dir die Spaltenvorschläge des Servers zu überarbeiten. Insbesondere kannst du dort int als Datentyp für deine numerischen Spalten festlegen. Das alleine hilft jedoch noch nicht bei Erfassungsfehlern. Du musst dann noch das Standardskript anpassen, mit dem die Feldwerte von der Quelle zum Ziel übertragen werden. Auf die Skriptanpassung kannst du pfeifen, wenn du die Importdatei vorher durch einen Filter laufen lässt (GREP oder SED).

Viel Erfolg

marabu

Ati 11. Aug 2005 14:47

Re: Textdateien fest mit einem SQL-Server verbinden
 
Leider kann ich noch nicht sagen ob es wirklich funktioniert, da ich noch ein kleines Problem habe. Habe jetzt das entsprechende Feld als "FLOAT" importiert. Wenn ich jetzt einen Test mache über einen Artikel der bei uns zweimal im Lager liegt erscheinen beide Positionen.... ich will aber nur die Gesamtzahl. Wie krieg ich das denn hin???

Ati

omata 11. Aug 2005 17:04

Re: Textdateien fest mit einem SQL-Server verbinden
 
Moin,

was meinst du mit Test?
Ich gehe mal davon aus, das du eine SQL-Abfrage meinst. Dann brauchst du irgend ein Feld, dass deine Aufträge genau identifiziert (z.B. eine auftrag_id). Nach dieser kannst du dann gruppieren und die Zeilen zählen.

SQL-Code:
SELECT auftrag_id, COUNT(*) anzahl
FROM tabelle
GROUP BY auftrag_id
Oder habe ich da jetzt was falsch verstanden?

MfG
Thorsten

marabu 11. Aug 2005 18:39

Re: Textdateien fest mit einem SQL-Server verbinden
 
Klingt ja so, als ob der Import jetzt funktioniert. Für die Feststellung des Lagerbestandes muss dann aber eine andere Aggregatfunktion verwendet werden:

SQL-Code:
SELECT artnr, SUM(lg-bestand) AS lg-bestand
FROM kxlf02 
GROUP BY artnr
ORDER BY lg-bestand DESC
Eventuell muss der Spaltenname in square brackets verpackt werden, wenn er ein Minuszeichen enthält.

Zitat:

Zitat von Ati
Und die Minuswerte sind nicht "unmotiviert", sondern werden tatsächlich von unserem WAWI zugelassen

Ich hatte die Spaltenwerte gemeint, die NUR ein Minuszeichen aufweisen - really strange.

marabu

Ati 12. Aug 2005 08:28

Re: Textdateien fest mit einem SQL-Server verbinden
 
Irgendwas klemmt noch. Ich mußte erst eine Sicht erstellen um gewisse Lagerbereiche auszugrenzen und habe dann zu Testzwecken diese Sicht als Basis genommen. Hier mal der SQL-Befehl:
Delphi-Quellcode:
SELECT    TOP 100 PERCENT ARTNR, SUM([LG-BESTAND]) AS [Lager 0]
FROM        dbo.VIEW1
GROUP BY ARTNR, [LG-BESTAND]
HAVING     (ARTNR = '130s10')
ORDER BY [LG-BESTAND] DESC
Wird Fehlerfrei ausgeführt jedoch bekomme ich für den Artikel (130s10) wird zwei Summen.

Ati

P.S. das mit "TOP 100 PERCENT" kommt automatisch

Ati 12. Aug 2005 08:37

Re: Textdateien fest mit einem SQL-Server verbinden
 
Kommando zurück es funktioniert mit folgender Syntax:
Delphi-Quellcode:
SELECT    TOP 100 PERCENT ARTNR, SUM([LG-BESTAND]) AS [Lager 0]
FROM        dbo.VIEW1
GROUP BY ARTNR
HAVING     (ARTNR = '130s10')
ORDER BY SUM([LG-BESTAND]) DESC
Es würde auch folgendes gehen:
Delphi-Quellcode:
SELECT    TOP 100 PERCENT ARTNR, SUM([LG-BESTAND]) AS [Lager 0]
FROM        dbo.VIEW1
GROUP BY ARTNR
HAVING     (ARTNR = '130s10')
ORDER BY SUM(DISTINCT [LG-BESTAND]) DESC
Ich wäre aber nicht ICH wenn es da nicht doch noch ein Problem gibt.... und zwar hat er die "Kommazahlen"
nicht genommen, so das anstatt 421,42m Wasserschlauch jetzt 42142 dort als Bestand steht!!!!!
Muß ich da beim Import noch was ändern?

Ati

marabu 12. Aug 2005 09:00

Re: Textdateien fest mit einem SQL-Server verbinden
 
Dein Kram läuft auf dem Server - da musst du auch seine Regeln befolgen. Wandle das Komma in einen Punkt um und dann geht das.

marabu

Ati 12. Aug 2005 09:43

Re: Textdateien fest mit einem SQL-Server verbinden
 
Vielleicht stelle ich mich ja ein bischen blöd an aber wie mache ich das. Sowie ich das sehe muß das beim importieren passieren. Habe versucht nach dem Import mit dem REPLACE-Befehl das zu machen, jedoch scheint das Komma da schon nicht mehr vorhanden.

Ati

Ati 12. Aug 2005 10:07

Re: Textdateien fest mit einem SQL-Server verbinden
 
Yeah ich habe es geschafft. Für alle die vielleicht mal ein ähnliches Problem haben hier die Lösung:
Das Transformationskript habe ich wie folgt geändert:
DTSDestination("LG-BESTAND")= REPLACE(DTSSource("LG-BESTAND"),",",".")

Ich danke Dir und den anderen von ganzem Herzen für Deine Geduld und Hilfe.

Ati


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz