Technik einfach und verständlich erklärt.
Sie können nützliches zu einem interessanten Thema berichten? Dann schreiben sie selbst einen Artikel auf Technikpedia!
 
Technik von Profis erklärt
Auf www.technikpedia.de können Sie Informationen zu verschiedenen Themen aus der Technik und Informatik finden. Durch verschiedene Editoren sind die Artikel besonders informativ und aussagekräftig.
Was ist ein Customer Relationship Management (CRM)?
CRM lässt sich mit Kundenbeziehungsmanagement übersetzen und meint bei Unternehmen mit Internetpräsenzen die Kundenpflege. Erst durch die Dokumentation und Verwaltung von Kundenbeziehungen ist ein wichtiges Beziehungsmarketing möglich.
Temporäre Tabellen in einer Datenbank
Die Idee einer temporären Tabelle
Wer es noch nicht kennt, dem möchte ich als Tipp temporäre Tabellen einer Datenbank vorstellen. Temporäre Tabellen gibt es für alle gängigen Datenbanksysteme. Ich verwende hier Microsoft SQL.
Temporäre Tabellen kann man zum Beispiel prima gebrauchen, wenn man sich mal eben schnell was merken will. Oder wenn man Daten zum Bearbeiten zwischenspeichern will eignet sich die schnelle und saubere Methode prima. Man braucht nicht erst eine View erzeugen oder per Hand eine Tabelle anlegen. Wie der Name vielleicht vermuten lässt, werden temporäre Tabellen nach Gebrauch, meistens nach Beendigung der Verbindung, gelöscht.
Erzeugung einer temporären Tabelle
Temporäre Tabellen können wie jede andere Tabelle mit dem Befehl CREATE TABLE <tabellenname> definiert und erzeugt werden. Beim Namen muss lediglich eine oder zwei Rauten (# oder ##) vorangestellt werden. Egal mit welcher Datenbank man gerade arbeitet, temporäre Tabellen werden intern in der Systemdatenbank tempdb gespeichert und sind aber überall verfügbar. Über den Speicherort braucht man sich in der Praxis keine Gedanken machen, da das Datenbankmanagementsystem sich automatisch darum kümmert. Nach der Beendigung der Datenbank-Session werden die Tabellen vom Datenbanksystem automatisch gelöscht und die Daten gehen verloren.
Ein echter Vorteil erschließt sich erst mit der Möglichkeit der direkten Erzeugung von temporär gefüllten Tabellen aus einem Select-Befehl. Das sieht dann zum Beispiel so aus:
SELECT * INTO #tempdaten FROM tabelle
So hat man direkt die von einem Select gelieferten Daten in einer temporären Tabelle zwischengespeichert. Man beachte, die Reihenfolge der Schlüsselwörter: erst select, dann into und zum Schluss from (und nicht erst from und dann into, sonst geht’s nicht).
Jetzt kann man nach Belieben die Daten weiterverarbeiten und Speichern.
Temporäre Tabellen in Stored Procedures
Eine wunderbare Verwendungsmöglichkeit ergibt sich bei gespeicherten Prozeduren (stored procedures). So können in einer temporären Tabelle prima die Daten manipuliert und dann automatisch weiterverarbeitet oder in andere Tabellen zurückgespeichert werden.
Sichtbarkeit - Der Unterschied zwischen einem und zwei Rauten (#) im Tabellenname (#tabellenname und ##tabellenname)
Werden bei dem Namen einer temporären Tabelle nur eine Raute (#) angegeben, so ist die Tabelle nur in der eigenen Verbindung sichtbar. Andere Verbindungen können nicht darauf zugreifen.
Bei temporären Tabellen mit zwei vorangestellten Rauten (##) sind diese auch für andere Sessions bzw. Verbindungen verfügbar.
Beide Arten von temporären Tabellen werden mitsamt ihren Inhalten gelöscht, wenn die Verbinung bzw. Session, in der die Tabelle erzeugt wurde, beendet wird.
Mit Openoffice Calc CSV-Dateien Speichern und unter Windows Einstellungen des Formates richtig festlegen
Wer mit der Tabellenkalkulation Calc von Openoffice.org (OOO) (Version 3.00 - Freeware) unter Windows schon einmal Dateien im CSV (comma seperated value)-Format speichern wollte, dem ist vielleicht aufgefallen, dass ihm da diverse Auswahlmöglichkeiten fehlen.
Es kann unter Umständen vorkommen, das man CSV-typische Einstellungen wie den Zeichensatz oder die Trennzeichen nicht auswählen kann. Standardmäßig wird immer im Zeichensatz latin-1 gespeichert, sowie ein Semikolon (;) als Feldtrenner und Anfürungsstriche („) als Texttrenner. Das Programm Openoffice.org speichert einfach ab, ohne vorher nachzufragen, wie die CSV-Datei nun genau aussehen kann.
Normalerweise kann man das Optionsfenster mit den Einstellungen zu den CSV-Dateien beim Speichern mit der Option „Filter Options” bzw. in deutsch „Filteroptionen” aktivieren. Das Feld ist aber unter Umständen, wie es bei mir der Fall war, aus unerklärlichen Gründen deaktiviert und ausgegraut.
Des Rätsels Lösung ist, dass Openoffice.org in den Standardeinstellungen den Speichern-Dialog von Windows verwendet. Wenn wir den OOO-eigenen Speichern-Dialog verwenden, dann sollte alles wie erhofft funktionieren.
Den Speichern-Dialog kann man unter den Einstellungen (Im Menü „Extras” → „Optionen” → „OpenOffice.org” → „Allgemein”) ändern. Hier bei „Öffnen/Speichern-Dialoge” das Häkchen „OpenOffice.org-Dialoge verwenden” anklicken.
Sobald wir diese Einstellung vorgenommen haben, sieht unser Speichern-Dialog ein wenig anders aus.
Jetzt können wir hier „Filtereinstellungen bearbeiten” anklicken. Und schön können wir nach einem Klick auf Speichern unsere gewünschten Einstellungen vornehmen.
Siehe da, Zeichensatz, Feldtrenner, Texttrenner - Alles ist da!
Suchen mit „where like“-Bedingung – Groß-/Kleinschreibung
Jeder, der bereits mit einer Datenbank gearbeitet hat, wird schon einmal die „like”-Klausel in der „where”-Bedingung verwendet haben.
SELECT * FROM tabelle WHERE feld LIKE ‘%suchtext%’
Dabei wird einem bestimmt aufgefallen sein, dass die Datenbank entweder zwischen Groß- und Kleinschreibung unterscheidet oder sie die Unterscheidung immer ignoriert.
Ob jetzt die Datenbank zwischen Groß- und Kleinschreibung unterscheidet kann man mit folgendem Befehl ermitteln:
SELECT serverproperty(’Collation’)
Als Ergebnis wird zum Beispiel „Latin1_General_CI_AS” oder „Latin1_General_CS_AS” zurueck geliefert. Dies ist die so genannte Collation. Sie gibt die unter anderem die Art der Sortierung in der Datenbank an. Für uns sind an dieser Stelle das CI und das CS wichtig. Dabei steht das CI für case ignore. Das kommt aus dem Englischen und bedeutet soviel wie das die Groß- und Kleinschreibung egal ist. Das CS steht für case sensitive. Hier spielt die Großschreibung bzw. Kleinschreibung eine Rolle.
Wenn das Ergebnis von SELECT serverproperty(’Collation’) zum Beispiel Latin1_General_CI_AS lautet, dann liefert
SELECT * FROM tabelle WHERE feld LIKE ‘%suchtext%’
die gleichen Ergebnisse wie
SELECT * FROM tabelle WHERE feld LIKE ‘%suCHtext%’.
Wenn aber bei der Datenbank die Collation Latin1_General_CS_AS eingestellt ist, dann schränkt die where-Bedingung den SQL-Befehl unterschiedlich ein.
Nun kann man die Collation für die Datenbank ändern. Da dies aber häufig nicht gewünscht oder nicht möglich ist, lässt sich die Collation direkt in der Select-Anweisung angeben.
So kann man zum Beispiel
SELECT * FROM tabelle WHERE feld LIKE ‘%Suchtext%’ COLLATE Latin1_General_CS_AS
schreiben, wenn die Groß- und Klein-Schreibung eine Rolle spielen soll. Felder mit dem Begriff „Suchtext” werden gefunden, aber nicht mit „suchtext”.
Wenn die Groß-/Kleinschreibung egal sein soll (man möchte „Suchtext”, „suchtext” sowie „SUCHTEXT” und „suchTeXt” finden), dann schreibt man
SELECT * FROM tabelle WHERE feld LIKE ‘%Suchtext%’ COLLATE Latin1_General_CI_AS
Hinweis: Diese Schreibweise funktioniert leider erst ab einem Datenbank-Kombatibilitätsgrad von 80.
PHP: Select Textfeld von MS-SQL-Datenbank, Zeichen werden abgeschnitten
Wer mit Hilfe der Scriptsprache PHP schon mal auf eine Microsoft-SQL-Datenbank zugegriffen hat, kennt sicherlich das Problem, dass in den Standardeinstellungen beim Auslesen von Textfeldern aus der Datenbank Zeichen beim Auslesen einfach abgeschnitten werden.
Das hängt damit zusammen, dass beim Server der Speicher für den maximal größtmöglichen Wert des Datenbankfeldes vorgehalten werden muss. So wäre dies bei Textfeldern Unmengen an Bytes. In den Standardeinstellungen von PHP ist die Größe der Textfelder, wenn sie ausgelesen werden, aus Performancegründen begrenzt (meist 4096).
Das Problem lässt sich folgendermaßen beheben:
Damit die Texte von Textfeldern nicht mehr nach so „wenigen” Zeichen abgeschnitten werden, kann auf dem Server, auf welchem PHP installiert ist, die php.ini angepasst werden.
Man suche nach den Zeilen, die mit mssql.textlimit, und mssql.textsize beginnen. Wenn sie nicht vorhanden sind, fügt man sie ein, bzw. entkommentiert die Zeilen, die als Beispiel bereits in der php.ini als Kommentar vorhanden sind.
Man setzt für beide Zeilen einen neuen Wert in Bytes, der ausreichend für die Textfelder ist, die man selektieren möchte. Das sieht dann zum Beispiel so aus:
mssql.textlimit = 10000000
mssql.textsize = 10000000
Wer keinen Zugriff auf die php.ini hat, und über ODBC-Treiber auf die Datenbank zugreift, kann auch sein PHP-Skript anpassen:
Der Zauberbefehl für PHP heißt odbc_longreadlen. Mit ihm steuert man die Nutzung der Text-Felder. Die Syntax für diesen Befehl lautet:
int odbc_longreadlen ( int $result_id , int $length )
Die $result_id ist das Handle, das von odbc_exec zurückgeliefert wurde. Bei $length wird angegeben, wie viel Bytes PHP zurück liefern soll.
Beispiel:
$Sql = ‘SELECT textfeld FROM tabelle’;
$cc = odbc_connect( $Dsn, $User, $Pwd );
$result = odbc_exec( $cc, $Sql );
odbc_longreadlen($result, 500000);
odbc_fetch_into($result, & $Data );
Daten mittels ASP von der SQL-Datenbank holen
Ein ähnliches Problem gibt es, wenn man Datenfelder vom Typ „Text” aus der Datenbank mittels ASP holen möchte. Dort muss man einen besonderen Cursortyp angeben:
Dim Db
Set Db = Server.CreateObject( “ADODB.Connection” )
Db.CursorLocation = 3 ‘ adUseClient
Neben CursorLocation gibt es noch CursorType und Locktype.
Cursortype:
- adOpenForwardOnly: 0
- adOpenKeyset: 1
- adOpenDynaset: 2
- adOpenStatic: 3
CursorLocation:
- adUseServer: 2
- adUseClient: 3
Locktype:
adLockUnspecified: -1
adLockReadOnly: 1
adLockPessimistic: 2
adLockOptimistic: 3
adLockLockBatch: 4


