ottscho
Goto Top

Warning: mssql

Hallo zusammen,
ich habe für testzwecke einen ms sql 2000 server. nun mache ich eine abfrage über php mit folgendem code:

[code]
$verbindung = mssql_connect("sqltestserver","sa","millch") or die
("Keine Verbindung moeglich");
mssql_select_db("ida_test_kunden") or die
("Die Datenbank existiert nicht");


$sql = 'SELECT * FROM kunden WHERE KDNR1 = 01279';
$ergebnis = mssql_query($sql);
while($row = mssql_fetch_object($ergebnis))
{
$kdnr1 = $row->KDNR1;
$name1 = $row->NAME1;
$name2 = $row->NAME2;
$strasse = $row->STRASSE;
$plz = $row->PLZ;
$ort = $row->ORT;
}
[/code]

leider bekomme ich eine fehlermeldung, aus welcher ich nicht schlau werde:

Warning: mssql_query() [function.mssql-query]: message: Unicode-Daten in einer Nur-Unicode-Sortierung oder ntext-Daten können nicht an Clients gesendet werden, die DB-Library (z.B. isql) oder ODBC, Version 3.7 oder früher, verwenden. (severity 16) in C:\xampp\htdocs\Auftrag\db_connect_test.php on line 10

kann mir bitte jmd weiterhelfen?

Gruß ottscho

Content-Key: 16090

Url: https://administrator.de/contentid/16090

Printed on: April 19, 2024 at 01:04 o'clock

Mitglied: 16640
16640 Sep 16, 2005 at 09:00:50 (UTC)
Goto Top
Hol' Dir mal von Microsoft die aktuellen Data Access Components. Geh' dort ins Downloadcenter und suche nach MDAC_TYP. Installier das Package auf dem Client, von dem Du die Abfrage machst. Sollte danach funktionieren.
Member: ottscho
ottscho Sep 19, 2005 at 06:17:24 (UTC)
Goto Top
Danke für den Tipp.
Ich hab versucht es zu installieren. Aber es kommt die meldung:
MDAC 2.8 RTM ist mit dieser Version von Windows nicht kompatibel. Alle Funktionen sind zurzeit Teil von Windows.

was nun?
Mitglied: 16640
16640 Sep 19, 2005 at 06:45:56 (UTC)
Goto Top
Auf was für einem Windows wolltest Du das denn installieren?

Nebenbei: Dein SQL-Statement an sich funktioniert und liefert das von Dir erwartete Ergebnis? Hast Du es mal im Query Analyzer ausgeführt? Was hat das Feld KDNR1 für einen Datentyp? Hintergrund dieser Fragen: Du fragst da ein Feld KDNR1 auf einen numerischen Wert 01279 ab, wobei da die führende Null überhaupt keinen Sinn macht.

dba
Member: ottscho
ottscho Sep 19, 2005 at 07:07:07 (UTC)
Goto Top
das feld KDNR1 hat den datentyp NVARCHAR.
wenn ich die selectanweisung SELECT * FROM kunden WHERE KDNR1 = 01279;
im sql query mache, funktionert die abfrage ohne probleme. das problem liegt an der php 5.0.5 version. die hat probleme mit dem unicode. ich hab auch schon herausgefunden, dass die neue betaversion 5.1 eine erweiterng hat ( PDO (PHP Data Objects) - A new native database abstraction layer providing performance, ease-of-use, and flexibility.), aber es ist halt nur die beta version. aber was mache ich jetzt nur?
Mitglied: 16640
16640 Sep 19, 2005 at 07:49:13 (UTC)
Goto Top
Ändere mal den Abfragestring so ab, dass der Vergleichswert in einfachen Anführungszeichen steht. Außerdem setzt Du noch ein Unicode-kennzeichnung davor. Dein Stringinhalt muss also so aussehen:

SELECT * FROM kunden WHERE KDNR1 = N'01279'

Vielleicht hilft das in Deinem speziellen Fall weiter.
Member: ottscho
ottscho Sep 19, 2005 at 08:23:41 (UTC)
Goto Top
leider nicht! bekomme immer noch diese meldung:
Warning: mssql_query() [function.mssql-query]: message: Unicode-Daten in einer Nur-Unicode-Sortierung oder ntext-Daten können nicht an Clients gesendet werden, die DB-Library (z.B. isql) oder ODBC, Version 3.7 oder früher, verwenden. (severity 16) in C:\xampp\htdocs\Auftrag\db_connect_test.php on line 8

die abfrage hab ich nun so gemacht, wie du wolltest:

$sql = "SELECT * FROM kunden WHERE KDNR1 = N'$kdnr' ";

ich komme echt nicht mehr weiter ...
Mitglied: 16640
16640 Sep 19, 2005 at 08:27:43 (UTC)
Goto Top
Datentyp ändern - zumindest mal testweise - oder muss die Kundennummer zwingend unicodefähig sein? Kannst Du am einfachsten mit dem Enterprisemanager machen.

Mit allem, was Richtung PHP geht, bin ich nicht der richtige, das geht an meinem Gebiet weit vorbei.
Member: ottscho
ottscho Sep 19, 2005 at 08:37:03 (UTC)
Goto Top
naja, datentyp ändern ist fast ausgeschlossen.
es handelt sich wie gesagt um die db unseres warenwirschaftssystems. und da will ich den datentyp nicht ändern. aber ich danke dir herzlich für deine mühen.

kennst sich hier jmd mit php aus? bzw. mit der installation von php?
Mitglied: 16640
16640 Sep 19, 2005 at 08:39:49 (UTC)
Goto Top
Wenn man Daten nicht ändern kann, hilft es, eine View zu definieren und die Spalte dann mit einem convert zu füllen. Du läßt dann deine Scripte auf die View zugreifen und kannst so einen Workaround schaffen.
Member: ottscho
ottscho Sep 19, 2005 at 10:56:11 (UTC)
Goto Top
sry, hab kein wort verstanden *g*
hast du vllt ein beispiel?
Mitglied: 16640
16640 Sep 19, 2005 at 11:28:32 (UTC)
Goto Top
create view  v_test
as
select
    feld1                           as f1,
    feld2                           as f2,
    convert(varchar(30), KDNR1) as f3
... weitere Felder
from Tabellenname
Danach hast Du dann eine View auf dem SQL-Server, auf die Du wie auf eine Tabelle zugreifen kannst. Du hast aber nun KDNR1 von einem Unicode-Feld in ein normales VARCHAR konvertiert.

Eine View verändert nichts an den originalen Tabellen, sonder ermöglicht lediglich eine andere Sicht auf die Daten. Man setzt das oft auch im Rechtemanagement ein. Ich kenne Unternehmen, bei denen es untersagt ist, direkt auf Tabellen zuzugreifen. In den Tabellen sind die Daten in kompletter ausbaustufe enthalten.

Beispiel: Personaldaten bestehen aus Adresse und Gehaltsinformationen. Es existieren nun unterschiedliche Views, nämlich welche, die sämtliche Daten beinhalten, aber auch andere, die die Gehaltsdaten gar nicht führen. Der normale Anwender bekommt nur die Berechtigung für die View, die keine Gehaltsdaten enthält. So kannst Du gewährleisten, dass niemand an die Gehaltsinformationen kommt, weil sie gar nicht in der View enthalten sind.

Soll als grobe Erklärung erstmal reichen. Auf jeden Fall müsstest Du damit Dein Problem so lange umschiffen können, bis Du ein Update erhalten hast.
Member: ottscho
ottscho Sep 19, 2005 at 14:15:53 (UTC)
Goto Top
danke, ich werde es morgen gleich testen und berichten wie es klappt.
doch gut, dass man sich hier im forum auf gute mithilfe andere verlassen kann.
*daumen hoch*

gruß ottscho
Member: ottscho
ottscho Sep 19, 2005 at 14:57:02 (UTC)
Goto Top
so, hab es nun ausprobiert und es futnkioniert einwandfrei. jetzt hab ich nur ne frage zur serverauslastung. dürfte groß kein unterscheid sein, oder?
Mitglied: 16640
16640 Sep 19, 2005 at 19:11:47 (UTC)
Goto Top
Nee, solange Du nicht in die Tiefe einsteigst und mit indizierten Views beginnst zu arbeiten, kannst Du das vernachlässigen.
Member: ottscho
ottscho Sep 20, 2005 at 05:54:30 (UTC)
Goto Top
alles klar. dann danke ich dir herzlich für deine mithilfe.
war echt klasse.

viele grüße aus dem schwarzwald
ottscho