Seite 1 von 1

SQL Felder nvarchar

Verfasst: Di, 04. Jan 2022 14:11
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,

Re: SQL Felder nvarchar

Verfasst: Di, 04. Jan 2022 17:09
von Marcus Herz
Nvarchar steht für utf16. Ist das das Problem?
Sql server ist case sensitiv.

Re: SQL Felder nvarchar

Verfasst: Di, 04. Jan 2022 19:24
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

Re: SQL Felder nvarchar

Verfasst: Di, 04. Jan 2022 19:43
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.

Re: SQL Felder nvarchar

Verfasst: Mi, 05. Jan 2022 20:28
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