Krug Markus.de

IT Business Consulting

Autor: Markus Krug Seite 1 von 2

Update einer SQL Tabellenspalte aus einer SQL Tabellenspalte einer anderen SQL Tabelle

Um  in einer Oracle Datenbanktabelle ein Update auf einer bestimmten Tabellenspalte mit Daten aus einer anderen Tabelle (Backup Tabelle) mit Vergleich einer Spalte, die in beiden Tabellen existiert, durchzuführen, muss folgende Update Anweisung ausgeführt werden.

[sql]

Update Tabellename1  set Tabellenname1.Spaltenname1 = (SELECT
Spaltenname2
FROM
Tabellenname2
WHERE
Tabellenname1.Spaltenname3 LIKE Tabellenname2.Spaltenname3)

[/sql]

Variablen Syntax in SQL Strings unter VBA

SQL Statements werden unter VBA wahlweise gleich in einen String oder idealer, in einer String-Variable definiert.

Beispiel für ein SQL Statement in einer String-Variable:

[vb]

Sub SQL_Beispiel()

Dim query1 As String

query1 = "Select Spalte from Tabelle
where
Spalte3 = ZahlenWert
and
Spalte2 =’StringWert‘
and
Spalte3 = ‚DatumsWert‘ "

End Sub

[/vb]

Jetzt sollen die Werte für Tabellenname, Spalte, Spalte1, Spalte2 und Spalte3 durch Variablen ersetzt werden.

[vb]

Sub SQL_Beispiel_mit_Variablen()

Dim query1 As String

query1 = "Select " + String-Spaltenname + "
from
" + String-Tabellenname + "
where
Spalte3 = " & ZahlWert & "
and
Spalte2 =’" + StringWert + "‘
and
Spalte3 = ‚" & Datum & "‘ "

End Sub

[/vb]

Wenn wir jetzt genau hinschauen, gibt es Unterschiede in der Syntax bei den unterschiedlichen Variablentypen String, Integer und Date.

Zunächst zur Syntax von SQL. Innerhalb der Anführungszeichen der VBA Stringvariable gilt die Syntax von SQL ANSI.

String- (VarChar)  Und Datums-Werte(Date)  werden in der SQL Syntax in einfachen Anführungszeichen gesetzt.  Zahlen-Werte( Number) ohne Anführungszeichen. Damit VBA Variablen innerhalb der SQl Syntax genutzt werden können, muss der Code gesplittet werden. D.h. der VBA String muss unterbrochen und fortgesetzt werden. Die geschieht wie üblich bei VBA mit Hilfe der doppelten Anführungszeichen. Schauen wir uns den Zahlenwert nach dem where Operator an. Mit einem doppelten Anführungszeichen wird der VBA String beendet und hier beginnt wieder die VBA Syntax.

Wenn wir nun eine Integer Variable verwenden wollen, müssen wir als Verknüpfungsoperator das & Zeichen wählen. Dann setzen  wir nach der Integer Variable wieder den Verknüpfungsoperator &. Jetzt  beginnen wir wieder mit dem VBA String mit seinem darin liegenden SQL Statement mit einem doppelten Anführungszeichen und setzen diesen fort.

Nun kommen wir an der Stelle an, an der wir eine Stringvariable für den Wert der Splate2 nutzen möchten. Es wird wieder der String mit einem doppelten Anführungszeichen beendet und die VBA Syntax beginnt. Wir müssen dabei beachten, das wir erst nach dem ersten einfachen Anführungszeichen den String beenden. Bei Stringvariablen muss als Verknüpfungsoperator das + Zeichen verwendet werden. Anschließend beginnen wir wieder mit einem doppelten Anführungszeichen den String. Wenn wir an der  Stelle für den Datums-Wert gelangt sind, beenden wir erneut mit dem doppelten Anführungszeichen den String und halten uns an der VBA Syntax.

Hier gilt eine Besonderheit zu beachten.

Datums-Werte werden unter SQL wie ein String behandelt, also in einfachen Anführungszeichen. Unsere Logik nach sollten wir dann wie bei einer String Variablen unter VBA das + Zeichen als Verknüpfungsoperator verwenden.

Dies ist dem nicht so, denn eine Datum-Variable wird unter VBA mit dem Verknüpfungsoperator & wie eine Integer Variable behandelt.  Deswegen gilt die Syntax ‚ “ & Datums-Variable & “ ‚!

Automatischer Eintrag einer eindeutigen ID in einer Oracle Datenbanktabelle


Generell sollten Datensätze in einer Datenbanktabelle eindeutig sein, um sie später genau zu selektieren. Eine Eindeutigkeit kann durch eine eindeute ID gewährleistet werden.
Um in einer Oracle Datenbank automatisch bei jedem Datenbankeintrag eine eindeutige fortlaufende Id zu generieren, muss dafür eine Sequenz und ein Trigger für die entsprechende Datenbanktabelle in der Skriptsprache PL/SQL erstellt bzw. kompiliert werden.

In einer Sequenz wird  eine Zahl unter definierten Bedingungen generiert. Diese Bedingungen können den Startwert, Minwert, einen Maxwert und Erhöhungschritt (Inkrementschritt) sein.

Um nun einen generierten Wert in einer dafür bestimmten Spalte in der Tabelle eintragen zu können muss neben der Sequenz auch ein Trigger kompiliert werden. Als erstes muss aber die Sequenz kompiliert werden, bevor der dazugehörige Trigger kompiliert werden kann.

Die Syntax zum erstellen einer Sequenz lautet.

[sql]
CREATE SEQUENCE "Schema"."Sequenzname"
MINVALUE 1
MAXVALUE 999999999999999999999999999
INCREMENT BY 1
START WITH 1
CACHE 20
NOORDER
NOCYCLE ;
[/sql]

Nach erfolgreichem kompilieren der Sequenz kann der Trigger erstellt werden.

Die dazugehörige Syntax lautet:

[sql]
create or replace
TRIGGER "Schema".Triggername before insert on Tabellenname for each row
begin
select Sequenzname.nextval into :new.Spaltenname from dual;
exception
when others then
null;
end;
[/sql]

.

Oracle Datenbanktrigger für einen Datumseintrag per PL/SQL auf eine Tabelle erstellen

Wenn ein Datenbankeintrag in einer Oracle Datenbank Tabelle erfolgt, soll gleichzeitig in einem Datumsfeld das aktuelle Datum eingetragen werden. Das bedeutet, wenn über ein Insert-Befehl Daten in einer Tabelle eingetragen werden soll, soll  zusätzlich zu gleichen Zeit das aktuelle Datum in das Datumsfeld eingetragen werden.

Dazu muß einen Trigger per Skriptsprache in den Schema erstellt werden, indem sich die Tabelle befindet auf der der Trigger abgesetzt werden soll. Um einen Trigger für das Datum kompilieren zu können muß zunächst eine weitere Spalte in der betreffenden Tabelle im Format „date“ erstellt werden.

Die Syntax für einen Trigger in der Skriptsprache PL/SQL für Oracle, der das aktuelle Datum eintragen soll lautet:

[sql]Create or Replace
TRIGGER "Schema".Triggername before insert on Tabellenname for each row
begin
select sysdate into :new.Spaltenname from dual;
exception
when others then
null;
end;[/sql]

Anschließend muß der Trigger kompiliert werden, damit dieser aktiv wird. Ab jetzt wird bei jedem Insert Eintrag automatisch das aktuelle Datum eingetragen.

Bei diesem Skript ist zu beachten, das das Datums-Format aus den Systemeinstellungen des Oracle Datenbankservers übernommen werden. Diese Problematik wurde hier schon beschrieben.

Um dieses Problem von vornherein zu umgehen, ändert man das Skript folgendermaßen:

[sql]Create or Replace
TRIGGER "Schema".Triggername before insert on Tabellenname for each row
begin
select to_date(sysdate,’dd.mm.yy‘) into :new.Spaltenname from dual;
exception
when others then
null;
end;[/sql]

Diese „to_date“ Syntax hat mein Kollege und Freund Bernhard Liebenhoff erarbeitet.

Mercedes A-Klasse Assyst / Service A + B

Für die Mercedes A-Klasse (W168) gibt es 2 Serviceintervalle:

Assyst/Service A umfasst: (Preis bei MB €149,00)

Quelle

  • Ölwechsel mit Teilsynthetik-Öl durchführen
  • Ölfilter wechseln
  • Funktionsprüfung:
    • Hupe, Lichthupe, Warnblinkanlage, Blinker
    • Kontrollleuchten, Symbolbeleuchtung und Innenraumbeleuchtung
    • Sicherheitsgute und Gurtschlösser auf Funktion und äußere Beschädigungen prüfen
    • Front- und Heckbeleuchtung
    • Scheibenwischer, Heckscheibenwischer und Scheibenwaschanlage
    • Serviceanzeige im Kombiinstrument zurücksetzen (nur Fahrzeuge mit Assyst)
  • Flüssigkeitsstände prüfen, ggf. richtig stellen:
    • Motorkühlsystem, Korrosions- und Frostschutz
    • Bremsanlage
    • Scheibenwaschanlage
    • Batterie
  • Sonstige Prüfarbeiten:
    • Reifenluftdruck richtig stellen
    • Reifenluftdruck des Reserverades richtig stellen

Assyst/Service B umfasst: (Preis bei MB €339,00)

Quelle

  • Bremsentest auf Prüfstand
  • Funktionsprüfung: Hupe, Lichthupe, Warnblinker, Blinker, Kontrollleuchten, Symbolbeleuchtung, Innenbeleuchtung, Front- und Heckbeleuchtung, Scheibenwischer, Heckscheibenwischer, Scheibenwaschanlage
  • Flüssigkeitsstand der Batterie prüfen, ggf. richtig stellen
  • Bremsscheiben auf Dicke und Zustand sowie Bremsklötze auf Belagdicke prüfen
  • Bremsbacken an der Hinterachse auf Belagdicke prüfen (bei Fahrzeugen mit Trommelbremse hinten)
  • Reifen auf Beschädigung prüfen, Profiltiefe messen, Reifendruck richtig stellen
  • Kontrolle aller sichtbaren Teile der Fahrzeugunterseite auf Undichtheiten und Beschädigungen
  • Vorderachs-, Spur- und Lenkstangengelenke auf Spiel prüfen, Gummimanschetten prüfen
  • Keilrippenriemen auf Verschleiß und Beschädigung prüfen
  • Kontrolle aller sichtbaren Teile im Motorraum auf Undichtheiten und Beschädigungen
  • Ölwechsel inkl. Ölfilter mit Teilsynthetik-Öl durchführen
  • Flüssigkeitsstände prüfen, richtig stellen und bei Flüssigkeitsverlust Ursache feststellen: Motorkühlsystem inkl. Frostschutz, Bremsanlage, Servolenkung, Scheibenwaschanlage
  • Staubfilter bzw. Kombifilter erneuern
  • Verschluss der Motorhaube und Sicherungshaken auf Leichtgängigkeit prüfen.
  • Leuchtweitenregulierung der Scheinwerfer prüfen
  • Scheinwerfereinstellung prüfen, richtig stellen
  • Wischerblätter prüfen, ggf. gegen gesonderten Auftrag erneuern
  • Reifenluftdruck Reserverad richtig stellen bzw. Verfallsdatum Reifendichtmittel TIREFIT prüfen

Mercedes A-Klasse Fensteheber neu anlernen

Hin und wieder reagieren die Taster der Fensterheber nicht mehr einwandfrei. Das kommt auch nach dem Abklemmen der Batterie vor.
Um die Taster neu anzulernen, muß man das betroffene Fenster ganz öffnen und den Taster 3 Sekunden weiter gedrückt halten. Das gleiche wir bei geschlossenem Fenster wiederholt.

Oracle Sysdate Wert aus einer Datumsspalte per SQL auslesen

Folgendes Problem:

Ich möchte aus einer Oracle Datenbank einen Wert aus einer Datumsspalte auslesen. Dieser Wert wurde über einen Datenbank-Trigger mittels Sysdate ( Oracle Datenbank Funktion : aktuelles Datum) in die Datumsspalte eingetragen.

Wenn man nun über:

[sql]Select (Spalte) from Tabellenname where Datumsspalte = ‚26.05.11‘[/sql]

Daten selektieren möchte, werden  keine Daten angezeigt, da keine Daten mit diesem Datum gefunden werden.

Das Problem besteht darin, das Oracle in diesem Fall ( hiesige Systemeinstellungen)  selbst das Datum über Sysdate im Format

[sql]dd/mm/yy:hh:mi:ssam[/sql]

übergibt. Wir sehen zwar in der in der Spalte das Format:

dd.mm.yy

aber selektieren müssten wir über

[sql]dd/mm/yy:hh:mi:ssam[/sql]

Ich möchte aber das Format dd.mm.yy selektieren.

Um dies zu bewerkstelligen muß ich folgende Syntax in SQL anwenden:

[sql]Select Spalte from Tabellenname where TO_Date(Datumsspalte,’dd.mm.yy‘)=’26.05.11′[/sql]

Wenn ich jetzt über einen Zeitraum Daten selektieren möchte muß folgende Sysntax angewendet werden:

[sql]Select Spalte from Tabellenname where Datumsspalte between to_date(‚24.05.11′,’dd.mm.yy‘) and to_date(‚26.05.11′,’dd.mm.yy‘)[/sql]

.

Excel Statistik vs. Oracle SQL Statistik

Berechnung der Standardabweichung ausgehend von der Grundgesamtheit.

In Mircrosoft Excle wird dafür die Funktion

STABWN(Zahl1; Zahl2;…)

genutzt.

Um die gleiche Funktion per SQL in Oracle auszuführen muß folgende Anweisung genutzt werden:

SELECT stddev_pop(Spalte) from Tabelle;

Schätzung der Standardabweichung ausgehend von einer Stichprobe.

In Mircrosoft Excle wird dafür die Funktion

STABW(Zahl1; Zahl2;…)

genutzt.

Um die gleiche Funktion per SQL in Oracle auszuführen muß folgende Anweisung genutzt werden:

SELECT stddev_samp(Spalte) from Tabelle;

oder

SELECT stddev(Spalte) from Tabelle;

Berechnung des Standardfehlers  einer  Schätzfunktion  für einen unbekannten Parameter  der Grundgesamtheit.

In Mircrosoft Excle wird die berechnung folgendermaßen durchgeführt:

STABW(Zahl1; Zahl2;…)/Wurzel(Anzahl(Zahl1; Zahl2;…)

Um die gleiche Funktion per SQL in Oracle auszuführen muß folgende Anweisung genutzt werden:

SELECT stddev(Spalte)/SQRT(Count(Spalte))  from Tabelle;

 

Zusammen mit meinem Kollegen und Freund Bernhard Liebenhoff erarbeitet.

Mercedes A-Klasse W168 Service Anzeige zurücksetzen

image

1. Zündung an

2. Zwei mal kurz hintereinander den oberen Bestätigungstaster li. von der Anzeigeneinheit drücken. Jetzt sollte die die Restlaufstrecke bzw. Resttage vom ASSYST angezeigt werden.

3. Den oberen Taster gedrückt halten.

4. Zündung aus- und wieder einschalten.

5. Den Taster solange gedrückt halten bis die Anzeige umspringt und der Signalton zu hören ist.

Das wars!

Ländereinstellung in Excel & VBA > das leidige Punkt, Komma Problem

Regionale Einstellung

Regionale Einstellung

Zunächst: Vielen Dank gilt meinem Arbeitskollegen und Freund Bernhard Liebenhoff, der nach mühseliger Arbeit mit der Problemsuche und Problemlösung, mir diese Information dieser Funktion zur Verfügung gestellt hat.

Hin und wieder wird man mit dem Punkt, Komma Problem und der Ländereinstellung in Microsoft Windows und Microsoft Office konfrontiert.

Im folgenden Beispiel trat der Fehler mit einem englischen Windows XP und Windows 7 mit  deutschem Sprachpaket, Regions- und Sprachoption in der unter Regionale Einstellung > Deutsch > Anpassen > als Dezimaltrennzeichen Punkt eingestellt wurde.

Normalerweise ist in der deutschen Einstellung an dieser Stelle ein Komma als Dezimaltrennzeichen definiet.

Wird aber auf diesem „deutschem“ System mit englischer Software gearbeitet und dann noch mit dem Nummerblock,  stellt man das Komma auf der Tastatur als Punkt ein.

Denn im englischen werden bekannterweise Dezimalzahlen mit Punkt statt mit Komma geschrieben.

Wenn man jetzt eine VBA Applikation erstellt die mit Dezimalzahlen arbeitet und diese Applikation auch auf anderen Rechnern nutzen möchte, bei der das Komma nicht als Punkt für die Tastatur eingestellt wurde, trifft man auf ein folgend schweres Problem.

Regionale Einstellung anpassen > Dezimaltrennzeichen

Regionale Einstellung anpassen > Dezimaltrennzeichen

Wenn in einer Userform eine Deziamlzahl in deutscher Schreibweise eingegeben wird, wird mit dieser Zahl nicht korrekt gerechnet, da VBA im Hintergrund diese Zahl nicht als Dezimalzahl, sondern als „Tausender Zahl“ erkennt. Denn im englischen gilt ein Komma als Tausender-Trennzeichen.

Nun könnte ganz einfach auf die Replace Funktion unter VBA zurückgegriffen werden, die das Komma durch einen Punkt ersetzt. Das funktioniert aber nur dann, wenn man eine Komma als Dezimaltrennzeichen unter den regionalen Einstellungen definiert hat. Wenn man das Trennzeichen in der Region Deutsch als Punkt definiert hat, kommt die Replace Funktion damit nicht zurecht.

Um nun schlußendlich herauszufinden, welches Trennzeichen auf dem jeweiligen PC eingestellt ist, kann man sich mit der Funktion

[vb]

Application.International(xlDecimalSeparator)

[/vb]

Abhilfe schaffen.

Diese Funktion ließt die atkuelle Einstellung aus,  mit der man dann weiter arbeiten kann:

[vb]

If Application.International(xlDecimalSeparator) = "." Then
Userform.Controls("TextBox" & 1).Value = Replace(Userform.Controls("TextBox" & 1).Value, ",", ".")
End If
[/vb]

Seite 1 von 2

Präsentiert von WordPress & Theme erstellt von Anders Norén