Avatar billede stig3 Mester
22. juni 2000 - 11:41 Der er 13 kommentarer og
3 løsninger

Rette i længde på text i 6.5

Jeg har oprettet et felt af typen text i sql server 6.5. Jeg kan dog ikke få lov til at rette i størrelsen, som er default 16.

Hvordan gør man ?
Avatar billede baunsgaard Nybegynder
22. juni 2000 - 11:47 #1
Typen Text er af en "uendelig" længde. 16 angiver en intern størrelse ligesom 4 ved int etc.

Din længde er variabel når du benytter Text.
Avatar billede stig3 Mester
22. juni 2000 - 12:20 #2
Det mente jeg også. Det er derfor jeg valgte denne type, men jeg får en fejlmeddelelse når jeg skriver lange tekster.

Kan det så have noget med odbc-driveren at gøre?

Jeg får denne fejl:
Microsoft OLE DB Provider for ODBC Drivers fejl '80040e14'

[Microsoft][ODBC SQL Server Driver][SQL Server]Line 1: Incorrect syntax near ','.

/forum/Kontordroftelser/gembesvarelse.asp, linje 21
Avatar billede stig3 Mester
22. juni 2000 - 12:22 #3
Koden virker som sagt godt med "korte" tekster.

ca. 1650 karakterer => Æv!
Avatar billede baunsgaard Nybegynder
22. juni 2000 - 12:42 #4
Ja, det kan vel være ODBC driveren eller dit SQL kald, der er forkerte...
Avatar billede stig3 Mester
22. juni 2000 - 12:50 #5
SQL kaldet ser således ud:

<%
response.buffer = true

'Henter parametrene
    AfsenderNavn = Request.QueryString("AfsenderNavn")
    AfsenderEmail = Request.QueryString("AfsenderEmail")
    BeskedEmne = Request.QueryString("BeskedEmne")
    BeskedTekst = Request.QueryString("BeskedTekst")

'Laver en connection til Telefonbog databasen paa SQLserveren
    Set conn = Server.CreateObject("ADODB.Connection")
    conn.Provider="MSDASQL"
    conn.open "DSN=Beskeder;uid=sa;pwd=;APP=TelefonBog;WSID=MAINFRAME;Database=Forum"
 
 
  SQL = "INSERT INTO Beskeder (SvarID, Dato, AfsenderNavn, AfsenderEmail, BeskedEmne, BeskedTekst, Afdeling) VALUES (0, '"& Now() & "', '" & AfsenderNavn & "', '" & AfsenderEmail & "', '" & BeskedEmne & "', '" & BeskedTekst & "', 6)"

  Conn.Execute(SQL)

  Conn.Close

  Set Conn = Nothing

  Response.Redirect "forum.asp"

%>

Og odbc driveren må da næsten være rigtigt oprettet når der ER forbindelse til databsen.
(Den skriver jo når teksten er "kort")
Avatar billede sjensen Nybegynder
22. juni 2000 - 13:04 #6
Har du prøvet at komme hhv. kommaer og gåseøjne i de korte tekster ? Jeg tror det er der det går galt.

Tænk på at når du sætter din SQL var op er det en lang tekststreng du sætter ind i den, og selvom du behørigt har afgrænset de enkelte felter med kommaer og gåseøjne, så får du et problem hvis der i en tekst er gåseøjne og kommaer.

Eks. hvis felter beskedemne indeholder denne en tekst a la dette:

bla bla bla "bla " bla "," bla" bla

Selvom du sætter gåseøjne rundt om denne vil SQL tro det er 2 felter, og så har du problemet.

Prøv evt. som test at udskrive SQL variablen (response.write SQL) inden du kalder conn.exeute(sql) så kan du se hvordan den egentlige sql-streng kom til at se ud, og så er det måske lettere at se hvad der går galt.

Avatar billede stig3 Mester
22. juni 2000 - 13:13 #7
Det lyder rigtigt.

Men er der en måde man kan forhindre at den opfatter teksten, som en del af SQL'en.

Det var vist lidt mere kompliceret end jeg troede, der kommer lige lidt ekstra point på.
Avatar billede stig3 Mester
22. juni 2000 - 13:29 #8
Jeg har prøvet at rense det indtastede for (') og nu kommer den ikke med en fejlmeddelelse, men i stedet skriver den kun noget af teksten ind i databasen.

Den skrev 1681 tegn.
(herefter må den så være blevet træt?)
Avatar billede sjensen Nybegynder
22. juni 2000 - 14:23 #9
Har du prøvet det med response.write SQL for at se hvordan din SQL streng ser ud ? Så kan det være at du kan se hvilket tegn der er nr. 1682 og dermed også hvad der er skyld i at det går galt. Noget må det jo være.

Windows arbejder jo med s^kaldt "nul-terminerede" strenge. Hvis et tegn i en streng er "ukendt" (f.eks. et special tegn) for SQL serveren, kan det tænkes at den opfatter det som et nul-tegn og dermed tror der ikke er flere tegn i teksten.

Det er vel ikke sådan at det er binære data (f.eks. et kompileret program, eller et billede ellr lign.) din tekst består af ?

Som et alm. tekstfelt tror jeg faktisk kun at SQl serveren accepterer karakterværdier mellem dec 32 og dec 255 (20h og FFh), så hvis nogle af tegnene har asciiværdier mellem 00h og 1Fh kan det gå galt.
Avatar billede stig3 Mester
22. juni 2000 - 14:39 #10
Det er ikke et forkert tegn. Jeg har testet ved at skrive:

aaa aaa aaa aaa

aaa aaa aaa aaa

Og kopieret det MANGE gange for til sidst at skrive slut.

Den skriver ikke hele teksten, men kun til ca. karakter nr. 1861 (jeg har talt ved hjælp af word).

Men kan det ikke være noget med variablens kapacitet???
Avatar billede sjensen Nybegynder
22. juni 2000 - 14:48 #11
sådan som du skriver det, indeholder det så linieskift eller kommer de 3 a'er og mellemrummet i en lang række ?

CR og LF er nemlig nogle af de tegn der ligger under 20h.

Jeg tror ikke på det med variablens kapacitet. Den burde være uendelig men der kan selvfølgeligt være andre årsager.

En mulighed kan være at du ikke bruger transaktionsstyring. Jeg ved fra andre der bruger SQl server og f,eks, vil slette en række records at der var nogle mærkelige grænser for hvornår det virkede, og hvornår dt ikke virkede, og det forsvandt ved at starte og afslutte transaktionsstyring hhv. før og efter sletningen. Måske kan det være noget i den retning der spiller ind her, fordi det er en meget lang tekst du vil lægge ned, selvom jeg har svært ved at se hvorfor det skulle være sådan.

Endeligt kan det vel også være et hardware problem: F.eks. hvis din SQL server kører på en NT server og du bruger en W95/98 arbejdsplads. Der er nogle registry-indstillinger man kan/skal sætte på serveren for at sikre at låsninger kører rigtigt på serveren, og måske kan det være noget af det der spiller ind.
Avatar billede stig3 Mester
22. juni 2000 - 14:54 #12
Det er MED linieskift og mange af dem.

Skal jeg så formatere på en eller andet måde inden jeg lægger dem ned i strengen.

Jeg kører fra pws på win95, men har også prøvet at lægge det på IIS 4.0 uden nogen forandring.

Det med transaktionsstyring ved jeg ikke hvordan man starter og slutter....
Avatar billede lrj Nybegynder
22. juni 2000 - 14:56 #13
Det med at du fjerner ' fra teksten - der er en nemmere måde:

råtekst = replace(råtekst,"'","''")

Erstatter alle ' med dobbelte, altså ' - det betyder at de er "escapede", og asp strengparseren sørger for at det der lægges i databasen er 1 '.

Smart, ikke?
Avatar billede sjensen Nybegynder
22. juni 2000 - 15:28 #14
stig3,

hvis der allerede er linieskift mellem de 1862 (eller hvor mange tegn det nu er du får lagt ned) så tyder det på at det ikke er dem, og så burde du ikke ændre på det.

Det med W95 kontrol NT handler om noget med Aggressive Locking. Jeg kan ikke lige huske de 2 variable i hovedet der skal ændres i NT's registry, men du kan evt. søge dem på MS hjemmeside. Du skal lede efter "oportunistic locking". Der er en del dokumenter der omtaler problemet.

Vedr. transaktionsstyring:
Det er noget med BeginTransaction og EndTransaction, men jeg er egentligt ikke eksperten lige på dette område så der kan jeg ikke hjælpe dig. Jeg ved bare at en af mine bekendte fortalte at det var løsningen på et problem han havde vedr. sletning af en stak records, som jeg nævnte.
Avatar billede stig3 Mester
23. juni 2000 - 10:34 #15
jeg har nu fundet ud af at fejlen ikke er i sql'en, men at den ikke får hele tekstrengen med fra det ene script til det andet.

Jeg giver lidt pts. og trækker spørgsmålet over i asp-kategorien.
Avatar billede stig3 Mester
23. juni 2000 - 10:34 #16
pts.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester