SQL Felder nvarchar

alles was zunächst nicht kategorisierbar ist

Moderator: Moderatoren

Antworten
Bernd Reinhardt
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 159
Registriert: So, 16. Apr 2006 11:12
Wohnort: Öhringen

SQL Felder nvarchar

Beitrag von Bernd Reinhardt »

Hallo.
Ich habe hier ein Problem welches ich mir nicht erklären kann.
Local habe ich einen MS-SQL-Server MSSQL15 installiert und in die Tabelle SNK Daten importiert. Über SQL-Studio kann ich mir die Daten ansehen.
Ich habe verschiedene Verbindungen getestet, zum Schluss eine DSN mit dem Sample von Alaska.
Die Benutzer DSN verwendet ODBC Driver 17 for SQL Server (32Bit).
Betriebssystem Windows 11
Alaska Version 2.00.1334 vom 25.11.2020
Die Verbindung zum SQL-Server geht immer. Beim Lesen der Daten kommt die Fehlermeldung das es einen Fehler mit dem Feld ADRESSE gibt.
Feld Seriennr geht aber Feld Adresse nicht. Beides sind nvarchar halt mit unterschiedlicher Länge.
Um das besser zu verstehen habe ich die Daten über folgens Array ausgelesen: (siehe Code)
Der Feldname und der Wert stehen dann in dem Array. Das mache ich für jeden Datensatz in der Tabelle SNK auf dem SQL-Server.

Und hier passiert folgendes:
Das Feld Seriennr (nVarChar31) hat immer den richtigen Inhalt.
Das Feld Adresse <nVarChar15) ist immer NULL, obwohl in der Datenbank ein Eintrag ist.
Das Feld Artikel ist immer NULL
Das Feld Lieferdatum hat immer den richtigen Wert aus der Tabelle.

Wie so liest das Programm die Felder vom Typ Timestamp, nvarchr(13), datetime aber NICHT die Felder nVarchar(15).

Irgend jemand eine Idee dazu.

Grüße und ein gesundes neues Jahr

Bernd

Code: Alles auswählen

 select ODBC_DATEI
               USE SNK VIA "ODBCDBE"  // like dbase 
               select ODBC_DATEI
               dbgotop()   
               altd()            
               do while !eof()
                 feld_array := {}
                 FOR loc_i = 1 TO FCOUNT()
                      AADD(feld_array,{fieldname(loc_i),fieldget(loc_i)})
                 NEXT 


// Auch mit dem Sample von Alaska geht es nicht.

Code: Alles auswählen

    ? "Please choose the DSN of the Nortwhind sample database"
    cDsn := "Applustest"
    
    CREATE CONNECTION INTO oSession DATASOURCE (cDsn) DIALOG 
    IF !oSession:isconnected()  
        Alert("Connection failed")
        QUIT
    ENDIF  
    SQL "SELECT * FROM SNK" VIA oSession 
    LIST ALL   // Fehlermeldung mit Feld Adresse
    CLOSE
So sieht die Tabelle auf dem SQL-Server aus.

CREATE TABLE [dbo].[SNK](
[id] [int] NOT NULL,
[timestamp] [timestamp] NOT NULL,
[SERIENNR] [nvarchar](31) NULL,
[CHARGE] [nvarchar](15) NULL,
[ADRESSE] [nvarchar](15) NULL,
[ARTIKEL] [nvarchar](22) NULL,
[LIEFERDATUM] [datetime] NULL,
Bernd Reinhardt
fa.reinhardt@gmx.de
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: SQL Felder nvarchar

Beitrag von Marcus Herz »

Nvarchar steht für utf16. Ist das das Problem?
Sql server ist case sensitiv.
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Bernd Reinhardt
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 159
Registriert: So, 16. Apr 2006 11:12
Wohnort: Öhringen

Re: SQL Felder nvarchar

Beitrag von Bernd Reinhardt »

Hallo

Nein das kann nicht das Problem sein, denn ich benutze ja nur die Feldnamen.
Was für ein Datentyp das Feld hat ist mir im esten Moment egal. Den Datentyp sehe ich nur im SQL Server Management Studio.
Und die habe ich nur mal Zahlen verwendet damit ich OEM und ANSI erst mal aus dem Weg gehe.

Gruß
Bernd
Bernd Reinhardt
fa.reinhardt@gmx.de
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: SQL Felder nvarchar

Beitrag von Marcus Herz »

Teste doch mal ein select 《fieldlist》 und lass mal feld adresse weg. Evtl ist der fehler woanders und erscheint in falschem context.
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Bernd Reinhardt
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 159
Registriert: So, 16. Apr 2006 11:12
Wohnort: Öhringen

Re: SQL Felder nvarchar

Beitrag von Bernd Reinhardt »

Hallo.

Ja der Fehler muss wohl einen falschen Bezug haben. Ich habe mal folgendes getestet:

Code: Alles auswählen

select ODBC_DATEI
cSQL := "SELECT ID, SERIENNR, ADRESSE, ARTIKEL, STATUS, ANLAGE, BEMERKUNG, ANP_LETZTEEICHUNG, ANP_TURNUS  FROM SNK ;" 
USE (cSQL) ALIAS SNK22 VIA "ODBCDBE"
Damit erhalte ich den Wert aus dem Feld Adresse richtig und auch aus Anlage und Status. Ich habe verschiedene Felder mal versucht aber keine Regelmäßigkeit festgestellt für den Programmabsturz. Bin mir nicht sicher ob das jetzt an einem Feldtyp liegt oder an der Anzahl. Bei 93 Felder etwas müßig hier alle Kombinationen zu probieren.
Bei einem Memofeld (var/max) erhalte die nur ein paar undefinierte Zeichen, egal wie viel in dem Textfeld steht. Aber auch das führt nicht zum Absturz.
Datumfelder sind auch kein Problem.
Numerische Felder sind auch kein Problem.
Mit einem freien Datenbanktool z. B. Database4.exe kann ich die Daten lesen. Das verwendet glaube ich .net. Das Problem scheint dann im xBase++ zu liegen.
Zum Glück ist so was bisher noch nicht beim Kunden sondern nur hier bei meinem Test aufgetreten.
Gruß
Bernd
Bernd Reinhardt
fa.reinhardt@gmx.de
Antworten