1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. alpines

Beiträge von alpines

  • MSSql Abfrage Datum vergleich

    • alpines
    • 8. April 2019 um 09:32
    Zitat von Springstil

    Also mein Problem ist, das es auch Artikel gibt, die zwar verfügbar sind aber nicht mehr angezeigt werden da kein TerminTagBS drin steht dort steht einfach nur NULL drin. Eine Lösung wäre es ja das ganze mit Order by zu sortieren und mit Top 1 nur den ersten auszugeben. Aber ich weiß nicht genau wie ich VOR dem Where den Order by befehl ausführen soll.

    Aber ich dachte du willst nur die aktuellsten Bestellungen ausgeben, und wenn da kein TerminTagBS gesetzt ist bedeutet das doch, dass niemand das Produkt bestellt hat.

    Kannst du vielleicht mal eine Beispieltabelle mit Daten in SQLFiddle basteln (kannst ja mein Template nehmen) und dann sagen was genau aus der Query rauskommen soll?

    Vielleicht kriege ich noch was dazu gebastelt aber aus deiner textuellen Beschreibung werde ich ehrlich gesagt nicht schlau.

    Du kannst grundsätzlich kein ORDER BY vor einem WHERE anwenden, weil das eh keinen Sinn machen würde, du kannst nur deine Ergebnistupel sortieren,

    sortierst du bevor du mit WHERE die Elemente prüfst wäre deine Ergebnismenge unsortiert.

    Möchtest du aus einer bereits sortierten Tabelle Daten queryen musst du sie in einer Unterquery starten, dort sortieren, und in der Hauptquery referenzieren, wie es BugFix bereits angesprochen hatte.

    Das macht aber nur bedingt Sinn, da du nicht auf die Subqueries von überall referenzieren kannst, deswegen müsstest du mehrere Subqueries haben und das ist zeitlich und speicherbedingt keine gute Idee.

    Da empfiehlt es sich eher eine Funktion zu schreiben welche mit einem Cursor deine Datenmenge iteriert, sortiert und ausgibt.

  • Regex "Multipattern" möglich?

    • alpines
    • 8. April 2019 um 09:20
    Zitat von Lottich

    Sowas wie RegEx, DLL-Calls oder ASM ist mir einfach zu kompliziert, da geht mir jede Logik ab.

    Ich hatte anfänglich auch sehr starke Probleme was DllCalls/Callbacks/Structs angeht aber es ist einfacher als es aussieht.

    ASM ist nun ein Thema was man wirklich vom Tisch wischen kann was AutoIt betrifft, das ist ja kein integraler Teil von AutoIt.

    Aber auch das lernt man wenn man sich langsam rantastet und einfach mal den x86-Befehlssatz durchprobiert.

    Kopf hoch, es ist noch kein Meister vom Himmel gefallen, jeder fängt klein an.

  • Anfänger braucht Hilfe bei DropDown Listen

    • alpines
    • 7. April 2019 um 08:49

    Hallo Uwe und herzlich willkommen im AutoIt.de-Forum!

    Du benutzt als Fenstertitel immer [CLASS:#32770] und das kann so nicht gutgehen, da sowohl das Fenster "Sounds" als auch die "Eigenschaften" die selbe Klassennummer haben.

    (wie der Soundmixer unten rechts im Traymenu und tausend andere Programme auch)

    Also solltest du lieber das Fenster mit seinem Titel identifizieren um Duplikate zu vermeiden.

    Kopier dir die Titel aus dem Window Info Tool heraus und füg sie dort ein, du brauchst auch keine Advanced Identifier wie [TITLE:Blabla] zu nutzen. Blabla reicht vollkommen.

    Der Titel sollte aber linksvollständig sein (anpassbar mit der Opt: WinTitleMatchMode), da AutoIt ihn sonst nicht findet.

    Des Weiteren solltest du es vermeiden die Option "WinWaitDelay" so oft zu setzen, da sie nur einmal gesetzt werden muss und dieser Wert genommen wird bis er überschrieben worden ist.

    Da du bereits die ControlSend/GetText/...-Funktionen verwendest würde ich es dir auch anraten für das wechseln zwischen den Tabseiten ebenfalls ControlCommand zu nutzen.

    Es kann sein, dass, während dein Skript läuft, ein anderes Fenster auftaucht und dann würden deine Send-Befehle dorthin gesendet werden statt an das ursprüngliche Fenster.

    Dazu kannst du als Befehl TabLeft respektive TabRight verwenden.

    Du kannst ja die Anpassungen mal vornehmen und uns berichten ob es funktioniert :)

  • Regex "Multipattern" möglich?

    • alpines
    • 7. April 2019 um 08:35
    Zitat von Andy

    Ich postuliere mal, dass >90% aller "Stringaufgaben" (gerade bei Anfängern) mit den einfachen Stringbefehlen hinzubekommen sind.

    Na klar, warum sich die Arbeit schwierig machen wenn es auch einfach geht.

    Ich persönlich nutze auch die normalen Stringfunktionen wo es geht, aber wenn ich gezielt Informationen aus einem Text extrahieren möchte dann ist RegEx mMn. einfach die komfortablste Variante,

    da man nicht über mehrere Zeilen mit Stringfunktionen alles parsen muss sondern ein Pattern nutzt und direkt alles im Array zurückbekommt.

    Und wenn ich es mit einem Pattern nicht hinbekomme alles zu extrahieren lass ich ein zweites Pattern oder Std-Stringfkt. drüberlaufen.

    regex101.com nutze ich auch immer. Falls Lottich sich das mal anschaut, solltest du dir die Flags rechts im Eingabefeld anschauen!!!

    Die musst du explizit im Pattern selber setzen wenn du sie in AutoIt umsetzt! Nicht dass du dich dort verklickst und dann den Flag im Pattern vergisst.

    /gm ist standardmäßig gesetzt, global ist standardmäßig gesetzt wenn du $STR_REGEXPARRAYGLOBALMATCH (3) verwendest.

    Das m steht für multiline und impliziert damit, dass ^ und $ Zeilenanfänge und -enden markieren und nicht die des gesamten Strings wie es bei AutoIt der Fall ist wenn du nicht explizit (?m) verwendest.

  • Regex "Multipattern" möglich?

    • alpines
    • 6. April 2019 um 23:20
    Zitat von Lottich

    So oft brauch ich RegEx nicht...

    Wenn du mal Zeit findest solltest du dich trotzdem an ein paar Pattern versuchen, so dass du ein Gefühl bekommst was man machen muss um das zu extrahieren was man kriegen muss.

    Ich bin selber kein Profi (und davon auch sehr weit entfernt), aber kriege (wenn auch miese) Pattern hin, womit ich an meine Daten komme.

    Mit ein paar Standardbegriffen wie . + ? ?: () | \d \\ [] ^ {} ?i ?s und dem Wissen was sie wo bedeuten reicht das schon.

    RegEx ist praktisch das Schweizer Taschenmesser für Stringverarbeitung.

  • Regex "Multipattern" möglich?

    • alpines
    • 6. April 2019 um 22:13

    Da deine Dateiendung direkt in das Pattern gefüttert wird kannst du einfach das entsprechende RegEx übergeben.

    Nimm als Pattern mal folgendes (endung1|endung2). Das ?: (don't capture this group) kann man weglassen (habs nicht eingefügt), da das StringRegExp in der UDF nur True/False zurückgibt und nicht die Funde.

    Jetzt weißt du wie man mehrere Dateiendungen suchen kann, also kannst du auch die Funktion dementsprechend umbauen :)

  • [Internet Explorer] Input-Feld füllen funktioniert manchmal, Fokus setzen geht

    • alpines
    • 5. April 2019 um 23:07

    Auf welcher Seite willst du das ganze denn machen? Du verwendest die falschen BEfehle, wenn du uns die Seite verrätst können wir dir vielleicht ein Skript präsentieren welches besser läuft als mit Control Send.

  • MSSql Abfrage Datum vergleich

    • alpines
    • 5. April 2019 um 21:20

    Ehrlich gesagt blicke ich da nicht mehr durch bei so vielen Edits, kannst du nochmal klar schreiben was du hast und was du erreichen willst?

  • Grafik auf Webseite auslesen, herunterladen, atomatisiert

    • alpines
    • 3. April 2019 um 17:27

    Deine Strings sind falsch, schau mal genauer hin.

  • Grafik auf Webseite auslesen, herunterladen, atomatisiert

    • alpines
    • 3. April 2019 um 16:51

    Und wieso speicherst du das ganze in eine Datei? Speicher das doch in eine Variable.

    Wieder hilft ein Blick in den Quellcode:

    Code
     <script>
             var loginUrl = 'https://www.werder.de/de/anmeldung/login/',
                 registrationUrl = 'https://www.werder.de/nc/de/anmeldung/registrierung/',
                 // ticketWebUrl = 'https://10.100.124.51/online/index.php3?shopid=105&gotoperformance=2344&nextstate=4',
                 ticketWebUrl = 'https://ticket.werder.de/online/index.php3?shopid=105&gotoperformance=2584&nextstate=4&setsession=185ca4c82026e94d96',
                 ticketWebIframe = document.querySelector('iframe[name="ticketweb"]'),
                 ticketWebSession = JSON.parse(window.sessionStorage.getItem('ticketWeb'));
    
             if (ticketWebSession !== null) {
                ticketWebUrl = ticketWebUrl.replace(/(gotoperformance=)[^\&]+./, '') + '&wes='+ticketWebSession.wes+ '&nextstate='+ticketWebSession.nextstate;
    
                window.sessionStorage.setItem('ticketWeb', null);
             }
    
             ticketWebIframe.src = ticketWebUrl;
          </script>
    Alles anzeigen

    ticketWebUrl brauchst du, und es gibt nur eine URL im Quellcode mit ticket.werder.de als Host, also nimm _StringBetween oder RegEx.

  • Grafik auf Webseite auslesen, herunterladen, atomatisiert

    • alpines
    • 3. April 2019 um 16:33

    Der ist in einem iframe-Objekt eingebunden auf der Website die du verlinkt hast.

  • MSSql Abfrage Datum vergleich

    • alpines
    • 3. April 2019 um 14:43

    Und was soll er dir da ausgeben wenn du zwei Einträge hast? Die Summe? MAX(datum) holt ja wirklich das aktuellste, also wenn die nicht auf die Mikrosekunde übereinstimmen wird nur eins zurückgegeben,

    oder speicherst du immer ohne Zeitangaben in deine Datenbank?

  • MSSql Abfrage Datum vergleich

    • alpines
    • 3. April 2019 um 14:32

    Wo genau ist das Problem wenn du an einem Tag mehrere Bestellungen hast? Redest du von verschiedenen Artikeln oder vom selben Artikel?

    Was soll zurückgegeben werden wenn du an einem Tag den selben Artikel 2x bestellst?

  • Grafik auf Webseite auslesen, herunterladen, atomatisiert

    • alpines
    • 3. April 2019 um 13:54

    Du kannst mittels BinaryToString(InetRead(...)) den Quellcode direkt herunterladen, danach musst du nur noch den JSON-Code regexen (oder eine JSON-UDF zum parsen verwenden).

    Dann hast du eine Auflistung aller Teile die freie Plätze (>=2) beinhalten und diese Bilder musst du nur noch herunterladen und selber prüfen.

    Ob im Quellcode irgendwo die Bilder als Text übermittelt werden (also so wie die Stadionteile) weiß ich nicht, das habe ich nicht genauer untersucht, wenn du das findest dann sparst du dir natürlich eine Menge Zeit.

  • Grafik auf Webseite auslesen, herunterladen, atomatisiert

    • alpines
    • 3. April 2019 um 13:47

    Nein, wohl kaum. Mit dem IE hab ich den Link auch finden können, du hast ihn wohl einfach nicht gesehen.

  • Anwendungen automatisch an bestimmte Monitorposition mit definierter Größe öffnen

    • alpines
    • 3. April 2019 um 13:01

    Wird keinen nennenswerter Unterschied machen da meist beim 1. ProcessClose der Prozess bereits geschlossen wird.

    Selbst wenn er nochmal die Schleife durchgeht (weil ProcessExists true schmeißt, wenn Windows den Prozess noch nich abgeschossen hat) wird sich das kaum auf die CPU-Last auswirken.

    Ich würde hier eher nach der Lesbarkeit des Codes gehen und das nehmen was schöner aussieht.

  • Grafik auf Webseite auslesen, herunterladen, atomatisiert

    • alpines
    • 3. April 2019 um 12:24

    Ein kleiner Einblick in den Quellcode bietet dir eine API-Schnittstelle die dir anzeigt wie viele Sitzplätze noch verfügbar sind:

    https://ticket.werder.de/online/index.p…ca487855327d187

    $.get('/entree/saalinterface.php3?wes=625ca487855327d187&getTopNList=2584').always(function(data){createUtilization(data.responseText); delete data;});

    https://ticket.werder.de/entree/saalint…etTopNList=2584

    Code
    {"67177":{"freeSeats":0,"ID":"67177","name":"71"},"67149":{"freeSeats":0,"ID":"67149","name":"20"},"67150":{"freeSeats":0,"ID":"67150","name":"35"},"67147":{"freeSeats":0,"ID":"67147","name":"19"},"67130":{"freeSeats":0,"ID":"67130","name":"18"},"67137":{"freeSeats":0,"ID":"67137","name":"16"},"67138":{"freeSeats":0,"ID":"67138","name":"17"},"67134":{"freeSeats":0,"ID":"67134","name":"37"},"67176":{"freeSeats":0,"ID":"67176","name":"38"},"67164":{"freeSeats":0,"ID":"67164","name":"46"},"67169":{"freeSeats":0,"ID":"67169","name":"47"},"67091":{"freeSeats":0,"ID":"67091","name":"44"},"67172":{"freeSeats":0,"ID":"67172","name":"42"},"67262":{"freeSeats":0,"ID":"67262","name":"39"},"67174":{"freeSeats":0,"ID":"67174","name":"40"},"67167":{"freeSeats":0,"ID":"67167","name":"41"},"67125":{"freeSeats":0,"ID":"67125","name":"15"},"67121":{"freeSeats":0,"ID":"67121","name":"14"},"67129":{"freeSeats":0,"ID":"67129","name":"3"},"67146":{"freeSeats":0,"ID":"67146","name":"4"},"67228":{"freeSeats":0,"ID":"67228","name":"S1"},"67166":{"freeSeats":0,"ID":"67166","name":"100"},"67266":{"freeSeats":0,"ID":"67266","name":"Stehpl\u00e4tze"},"67285":{"freeSeats":0,"ID":"67285","name":"N1"},"67180":{"freeSeats":0,"ID":"67180","name":"1"},"67128":{"freeSeats":0,"ID":"67128","name":"5"},"67131":{"freeSeats":0,"ID":"67131","name":"6"},"67120":{"freeSeats":0,"ID":"67120","name":"12"},"67124":{"freeSeats":0,"ID":"67124","name":"13"},"67123":{"freeSeats":0,"ID":"67123","name":"11"},"67117":{"freeSeats":0,"ID":"67117","name":"10"},"67148":{"freeSeats":0,"ID":"67148","name":"7"},"67127":{"freeSeats":0,"ID":"67127","name":"8"},"67122":{"freeSeats":0,"ID":"67122","name":"9"},"67171":{"freeSeats":0,"ID":"67171","name":"48"},"67254":{"freeSeats":0,"ID":"67254","name":"49"},"67259":{"freeSeats":0,"ID":"67259","name":"135"},"67257":{"freeSeats":0,"ID":"67257","name":"137"},"67255":{"freeSeats":0,"ID":"67255","name":"133"},"67253":{"freeSeats":0,"ID":"67253","name":"131"},"67246":{"freeSeats":0,"ID":"67246","name":"125"},"67251":{"freeSeats":0,"ID":"67251","name":"127"},"67240":{"freeSeats":0,"ID":"67240","name":"129"},"67261":{"freeSeats":0,"ID":"67261","name":"139"},"67142":{"freeSeats":0,"ID":"67142","name":"101"},"67160":{"freeSeats":0,"ID":"67160","name":"113"},"67159":{"freeSeats":0,"ID":"67159","name":"115"},"67161":{"freeSeats":0,"ID":"67161","name":"111"},"67162":{"freeSeats":0,"ID":"67162","name":"109"},"67152":{"freeSeats":0,"ID":"67152","name":"103"},"67153":{"freeSeats":0,"ID":"67153","name":"105"},"67163":{"freeSeats":0,"ID":"67163","name":"107"},"67242":{"freeSeats":0,"ID":"67242","name":"123"},"67133":{"freeSeats":0,"ID":"67133","name":"121"},"67181":{"freeSeats":0,"ID":"67181","name":"104"},"67145":{"freeSeats":0,"ID":"67145","name":"106"},"67182":{"freeSeats":0,"ID":"67182","name":"102"},"67173":{"freeSeats":0,"ID":"67173","name":"53"},"67175":{"freeSeats":0,"ID":"67175","name":"50"},"67258":{"freeSeats":0,"ID":"67258","name":"51"},"67165":{"freeSeats":0,"ID":"67165","name":"52"},"67168":{"freeSeats":0,"ID":"67168","name":"108"},"67139":{"freeSeats":0,"ID":"67139","name":"110"},"67252":{"freeSeats":0,"ID":"67252","name":"119"},"67189":{"freeSeats":0,"ID":"67189","name":"120"},"67144":{"freeSeats":0,"ID":"67144","name":"118"},"67244":{"freeSeats":0,"ID":"67244","name":"117"},"67256":{"freeSeats":0,"ID":"67256","name":"112"},"67260":{"freeSeats":0,"ID":"67260","name":"114"},"67249":{"freeSeats":0,"ID":"67249","name":"116"}}

    Dort kriegst du auch die IDs die du brauchst um die entsprechenden Stadionsektionen anzusprechen.

    Anhand der URLs mit den du die Bilder holst weißt du ja das Format, nun musst du nur noch das ganze zusammenbauen.

  • MSSql Abfrage Datum vergleich

    • alpines
    • 3. April 2019 um 12:09
    Zitat von Springstil

    Ich verstehe noch nicht so ganz wie du aus best.kunde erstellst bzw daraus die best2 machst?

    Der Grund warum wir best2 brauchen ist die Aggregationsfunktion MAX() um datum herum. Würden wir diese schon bei der 1. Query nutzen, so würde nur das aktuellste Datum von allen Produkten zu einem User ausgegeben werden (also nur ein Datum, da das höchste von ALLEN Produkten ausgewählt wird), aber wir wollen ja das aktuellste Datum zu allen Produkten aller User (also höchstes Datum von Artikel 10000, höchstes Datum Artikel 30000...).

    Deshalb starten wir eine Unteranfrage die sich nur auf den aktuellen Kunden und nur auf die aktuelle ArtikelNr bezieht.

    Dort suchen wir das höchste Datum und fügen es in die WHERE-Klausel der 1. Query ein, dort steht ja best.datum = (SELECT ...).

    Aus diesem Grunde müssen wir auch die Tabellen mit Bezeichnern instanziieren da du sonst ambivalente Spaltenbezeichnungen hast.

    Lässt du die Bezeichner weg und nutzt nur kunde = kunde würden alle Tupel aus der Unterquery abgefragt werden (da das immer true ist) statt dem aktuellen Kunden.

  • MSSql Abfrage Datum vergleich

    • alpines
    • 3. April 2019 um 11:37

    Springstil So, habs hinbekommen, erst in MySQL und dann in MSSQL übersetzt, ich hoffe du kriegst das in deine Datenbank eingebunden.

    Wenn du Fragen hast, nur raus damit.

    http://sqlfiddle.com/#!18/a00d1/2/0

    In der Datenbank sind für die selben Artikel mehrere Bestellungen hinterlegt und er gibt zu dem User immer das neueste aus,

    schau dir mal die Daten an die ich eingefügt hab und dann was er SELECTed.

    SQL
    CREATE TABLE artikel (
        name varchar(max),
        preis float,
        artikelnr integer
    );
    
    CREATE TABLE bestellungen (
        kunde varchar(max),
        artikelnr integer,
        datum datetime
    );
    
    INSERT INTO artikel VALUES
        ('AutoIt3', 14.99, 10000),
        ('AutoHotKey', 4.99, 20000),
        ('C#', 24.99, 30000)
    ;
    
    INSERT INTO bestellungen VALUES
        ('Springstil', 10000, '2019-04-03 11:06.000'),
        ('alpines', 10000, '2011-01-01 12:00.000'),
        ('alpines', 10000, '2018-03-01 12:00.000'),
        ('alpines', 30000, '2018-10-10 12:00.000'),
        ('Springstil', 10000, '2016-03-12 11:58.000'),
        ('Springstil', 30000, '2014-03-03 12:00.000'),
        ('Springstil', 30000, '2015-03-03 12:00.000')
    ;
    
    SELECT best.kunde, best.datum, art.name, art.artikelnr, art.preis
      FROM artikel art JOIN bestellungen best ON (art.artikelnr = best.artikelnr)
        WHERE best.datum = (SELECT MAX(best2.datum) FROM bestellungen best2
                              WHERE best2.artikelnr = best.artikelnr
                               AND best2.kunde = best.kunde);
    Alles anzeigen
  • MSSql Abfrage Datum vergleich

    • alpines
    • 3. April 2019 um 10:46
    Zitat von Springstil

    nur weiß ich nicht wie ich das bei mir anwenden soll geschweige den richtig Instantiieren soll. Ist damit die AS Bezeichnung gemeint ? Du hast nicht zufällig ein beispiel in MSSQL für mich ?

    Mit AS vergibst du ja den ausgewählten Spalten neue Namen, ich meinte aber die Tabellen, ob da bei MSSQL auch AS verwendet wird weiß ich nicht.

    Ich schau mal ob ich online eine kleine Testdatenbank mit einer Query hinbekomme die ich dir dann hier teilen kann.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™