Announcement

Collapse
No announcement yet.

Event nach Trigger auslösen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Event nach Trigger auslösen

    Hallo, habe schon danach in mehreren Foren gesucht, aber nicht die Antwort gefunden, deshalb nun ein neuer Beitrag!

    Ich habe eine SQL-Datenbank. Wird in eine bestimmte Tabelle ein neuer Datensatz eingefügt, soll dieser ausgedruckt werden.

    1. Ist das mit Triggern realisierbar!? Bishher habe ich nur gelesen, dass in Triggern nur SQL-Statements ausgelöst werden können.

    2. Kann ich in einem Trigger externe Programme starten!?

    Gruß

  • #2
    Hallo,
    Originally posted by juppmania View Post
    1. Ist das mit Triggern realisierbar!? Bishher habe ich nur gelesen, dass in Triggern nur SQL-Statements ausgelöst werden können.
    Ein Trigger kann i.a.R. alles das erledigen, was mit der SQL-Erweiterung für SPs des verwendeten Servers machbar ist.
    Originally posted by juppmania View Post
    2. Kann ich in einem Trigger externe Programme starten!?
    Wenn dies von der SQL-Erweiterung des Servers unterstütz wird, Ja.
    Dies macht aber im Allgemeinen nur Sinn, wenn dieses Programm auch wirklich für die Konsole des Servers gedacht ist (und nicht z.B. irgendwelche Eingaben erwartet oder die Stabilität des Servers beeinträchtigt).
    Das Starten von Programmen auf dem Client ist über einen Datenbanktrigger nicht möglich - hierfür ist die Applikation zuständig.

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Welches DBMS?
      Man könnte einen Event auslösen, der dann von einem externen Programm ausgewertet wird und dann der Druck gestartet.

      Comment


      • #4
        dbms ist ms-sql und das programm, was ich starten will benötigt keine eingaben!

        gibt es da codebeispiele, wie ich aus dem trigger externe programme aufrufe!?

        Comment


        • #5
          AFAIK unterstützt MSSQL Notifications. Schau mal danach.

          Comment


          • #6
            ok..notifications hat mich leider auch nicht weitergebracht...und programme kann ich bisher auch nicht starten. mein trigger sieht im moment so aus:


            CREATE TRIGGER test ON [tabellenname]
            AFTER INSERT
            AS
            EXEC xp_cmdshell 'net send 192.168.4.101 hallo' , no_output



            wollte mal die cmd öffnen aber das tuts auch nicht....hmmm...steh aufm schlauch.

            Comment


            • #7
              "net send" ist nicht gerade der ideale Befehl um sowas zu testen - hast du das vorher überhaupt mal in einem DOS-Fenster ausprobiert (geht bei mir unter XP nämlich nicht)?.
              Ich habe das mal schnell selber getestet, allerdings mit
              Code:
              exec xp_cmdshell 'echo hallo > c:\test.txt'
              und damit geht's einwandfrei, ich finde nach einem insert diese Datei inkl. hallo als Text im C-Laufwerk
              Sollte auch das nicht funktionieren und es ist doch ein SQL2005, dann muss vielleicht noch die Verwendung von xp_cmdshell explizit freigegeben werden (geht in SQL 2005 Oberflächenkonfiguration -> Oberflächenkonfiguration für Features -> Servername/Datenbankmodul/xp_cmdshell)

              bye,
              Helmut

              Comment


              • #8
                hi...es ist ein mssql server 2000.

                und, dass net send nicht funktioniert liegt wahrscheinlich daran, dass der windows nachrichten dienst deaktiviert ist...


                und mit dem echo funktioniert es auch nicht...ich wede mal schauen, wo in meinem server diese einstellung ist, um die xp_shell zu aktivieren/freizuschalten!

                gruß!

                Comment


                • #9
                  Originally posted by juppmania View Post
                  Hallo, habe schon danach in mehreren Foren gesucht, aber nicht die Antwort gefunden, deshalb nun ein neuer Beitrag!

                  Ich habe eine SQL-Datenbank. Wird in eine bestimmte Tabelle ein neuer Datensatz eingefügt, soll dieser ausgedruckt werden.

                  1. Ist das mit Triggern realisierbar!? Bishher habe ich nur gelesen, dass in Triggern nur SQL-Statements ausgelöst werden können.

                  2. Kann ich in einem Trigger externe Programme starten!?

                  Gruß
                  Ich würde einen etwas anderen Ansatz wählen.
                  Der Trigger sollte lediglich einen Counter hochzählen und ein externes Programm sollte dann auf die DB zugreifen und dann die Daten drucken, wenn der Counter (oder welche Bedignung auch immer) definiert, dass gedruckt werden soll.
                  In der Haupttabelle kann man ja dann eine Spatel "IsPrinted" anlegen, damit man weiss, welche Aufträge es zu drucken gibt.

                  Vorteile:
                  - Externes Programm lässt sich individuell anpassen (spezielle Rechte Themen). EXEC aus SQL läuft immer im Rechtekontext des Services.
                  - Es würde alle Printjobs erledigen, die nicht gedruckt sind. Das IsPrinted = True würde das Programm eintragen, somit hätte man da mehr Kontrolle.
                  - Lässt sich einfach z.B. in vbScript umsetzen (ADO)

                  Das Programm/Script liesse man dann z.B. mit dem TaskSheduler alls x Minuten laufen.
                  Freundliche Grüße
                  Yves Rausch

                  Comment


                  • #10
                    Originally posted by rausch View Post
                    Ich würde einen etwas anderen Ansatz wählen.
                    Der Trigger sollte lediglich einen Counter hochzählen und ein externes Programm sollte dann auf die DB zugreifen und dann die Daten drucken

                    danke für die antwort...das ist genau das, was bei uns im moment läuft. in der datenbank gibt es eine tabelle polling. unser programm, dem die datenbank zugrunde liegt pollt alle 20 sec auf diese tabelle, ob neue Einträge da sind, druckt diese und löscht sie dann aus der tabelle.

                    allerdings ist dies nicht mehr gewünscht. der druckjob soll auf dem server angeschmissen werden, von der sql datenbank aus. ob nun irgendwie direkt eine funktion dort eingebunden werden kann, oder erst über die cmd und dann wiederum ein programm, dass dann angeschmissen wird ist dann egal!

                    auf jeden fall soll vermieden werden, dass ständig die datenbank abgefragt werden soll!

                    danke !

                    Comment


                    • #11
                      Originally posted by juppmania View Post
                      danke für die antwort...das ist genau das, was bei uns im moment läuft. in der datenbank gibt es eine tabelle polling. unser programm, dem die datenbank zugrunde liegt pollt alle 20 sec auf diese tabelle, ob neue Einträge da sind, druckt diese und löscht sie dann aus der tabelle.

                      allerdings ist dies nicht mehr gewünscht. der druckjob soll auf dem server angeschmissen werden, von der sql datenbank aus. ob nun irgendwie direkt eine funktion dort eingebunden werden kann, oder erst über die cmd und dann wiederum ein programm, dass dann angeschmissen wird ist dann egal!

                      auf jeden fall soll vermieden werden, dass ständig die datenbank abgefragt werden soll!

                      danke !
                      Darf ich fragen, wer die Entscheidung trifft, warum das nicht mehr erfolgen soll?
                      Eine SQL Abfrage (Poll) auf eine SQL Tabelle (selbst wenn viele Rows da sind setzt man einen INDEX und fertig...) dauert wenige tausend ms. Aus Performance Sicht gewinnt man da garnichts, Serverlast wird auch keine erzeugt. Aber wie auch immer. Ein EXEC eine externen Anwendung bringt das Problem des Rechtekontextes mit.
                      Sprich Du musst wissen, dass das EXEC mit der Windows-Identität ausgeführt wird, unter der der SQL Server Dienst läuft. Das aufgerufene Programm muss ebene dies per NTFS-Rechte etc. zulassen, dann geht das auch.
                      Toll ist das imho aber nicht, weil dann der Druckerspooler Jobs von einem User bekommt, der in der SQL Instanz genutzt wird.

                      Unter sql2005 kannst Du .NET Assemblies schreiben, die in der Datenbank sind und wie SQL Functions mit Transact SQL angesprochen werden können. Das ist dann aber eine etwas komplexere Sache.

                      Bereits angesprochen geht dann auch das xp_cmdshell. Beispiele findest Du hier: http://msdn2.microsoft.com/en-us/library/ms175046.aspx
                      Freundliche Grüße
                      Yves Rausch

                      Comment


                      • #12
                        verstehe ich das richtig, dass exec dann immer mit den rechten ausgeführt wird, die der sql-benutzer besitzt!? verstehe da die bedenken nicht so ganz.

                        Comment

                        Working...
                        X