Avatar billede centauri Nybegynder
20. januar 2001 - 00:10 Der er 3 kommentarer og
1 løsning

Problem med MEMO felt i SQL

Jeg er løbet ind i et kæmpe og meget iriterrende problem med en database lige nu.

Jeg har en SQL database hvor det ene felt er af typen Memo eller Ntext som der står på SQL.
Det felt skal jeg så have udlæst i en Text Boks via
<textarea rows=\"20\" name=\"text\" cols=\"80\"><%=rs2(\"Description\")%></textarea>
Men det går den ikke med til og kommer med følgende fejl :
<font face=\"Arial\" size=2>
<p>Microsoft OLE DB Provider for ODBC Drivers</font> <font face=\"Arial\" size=2>error \'80020009\'</font>
<p>
<font face=\"Arial\" size=2>Errors occurred</font>
<p>
<font face=\"Arial\" size=2>?</font>

Men ændre jeg feltet til et normalt text felt så er det ikke noget problem.

Nogen der har oplevet det før og har en løsning.
Avatar billede ldanielsen Nybegynder
20. januar 2001 - 12:45 #1
Kender ikke Ntext, men er det ikke noget med at det er binære felter? Nej, de hedder vist blob?

Jeg har ikke books online lige her, med check det lige
Avatar billede it-avisen.dk Nybegynder
20. januar 2001 - 17:10 #2
Jeg kender problemet ganske godt - det er lidt indviklet at forklare, men jeg prøver alligevel.

MS SQL gemmer normalt dataen samme sted, men der er en undtagelse ved Ntext - da der er tale om en ganske stor mængde data gemmes den uden for den normale struktur.
Af performence hensyn anbefaldes det altid at du bruger varchar som kan gemme op til 4000 tegn, hvilket i mange tilfælde også er rigligt.
Men til meget store tekst felter kan det blive nødvendigt.

Lad mig komme med et eksempel.
Vi har en SQL database med følgende felter:
ID (int autonumr.)
Fornavn (varchar(255)) //Kan gemme 255 bogstaver af typen var char. Varchar er non-unicode hvilket betyder at den ikke kan gemme alle tegn, men langt de fleste understøttes (heriblandt ÆØ og Å).Ønskes muligheden for uni-code skal typen være nvarchar - bemærk at dataen fylder dobbelt så meget ved nvarchar
efternavn (varchar(255))
Livhistorie ntext

Vi kalder skittet fra ASP: (Returnere fejl)
rs.open \"select * from myTable\",dataconn
do while not rs.eof
response.write rs(\"Livhistorie\")
rs.movenext
loop

Vi får som sagt en fejl ved dette, da sql\'en og asp ikke akn finde ud af at hente dataen i den rigtige række følge - ntext skal altid ligge sidst i forespørgelsen:
rs.open \"select fornavn,efternavn,livshistorie from myTable\" vil ikke returnere en fejl hvorimod \"select efternavn,livshistorie,fornavn from myTable\" vil returnere samme fejl.

Håber dette kan bruges - som sagt lidt indviklet.

Husk at læse de bedste nyheder:
http://www.IT-Avisen.dk
Avatar billede centauri Nybegynder
21. januar 2001 - 18:36 #3
Det kan jeg desværre ikke få til at virke min kode ser således ud.

<%
IDs= Request(\"ID\")
IDs = int(IDs)


dim objCon \' The connection object
dim objCmd \' The connection object
dim rs \' The recordset object

set objCon = server.createobject(\"ADODB.Connection\")
objCon.Open \"ODBC\",\"USER\",\"PASS\"
set objCmd= Server.CreateObject(\"ADODB.Command\")
set objCmd.ActiveConnection = objCon
\' Set the Command type: 0 =unknown, 1 = text, 2 = table, 3 = stored procedure
objCmd.CommandType = 1
Set rs = Server.CreateObject(\"ADODB.Recordset\")

objCmd.CommandText = \"select *  from [Category]  ORDER BY [Category_Name]\"
rs.Open objCmd, ,0,1


dim objCon2 \' The connection object
dim objCmd2 \' The connection object
dim rs2 \' The recordset object

set objCon2 = server.createobject(\"ADODB.Connection\")
objCon2.Open \"ODBC\",\"USER\",\"PASS\"
set objCmd2= Server.CreateObject(\"ADODB.Command\")
set objCmd2.ActiveConnection = objCon2
\' Set the Command type: 0 =unknown, 1 = text, 2 = table, 3 = stored procedure
objCmd2.CommandType = 1
Set rs2 = Server.CreateObject(\"ADODB.Recordset\")

objCmd2.CommandText = \"select ID,Name,Path,Descriptionst  from [Files]  Where [ID] =\" & IDs
rs2.Open objCmd2, ,0,1




%>
<form method=\"POST\" action=\"update_text.asp\">
 
<table>
 
<tr>
        <td width=\"50%\">Kategori</td>
        <td width=\"50%\">
        <select name=\"kategori\" size=\"1\"> 



<% do while not rs.eof%>


<%if rs(\"ID\") = rs2(\"Category\") then%>
<option selected value=\"<%=RS(\"ID\")%>\"><%=RS(\"Category_Name\")%></option>  &nbsp;
<%rs.movenext

else  %>
<option value=\"<%=RS(\"ID\")%>\"><%=RS(\"Category_Name\")%></option>  &nbsp;
<%
rs.movenext
end if
loop
%>

  </select>

        </td>
</tr>
<tr>
        <td width=\"50%\">Navn</td>
        <td width=\"50%\"><input type=\"text\" name=\"Navn\" size=\"30\" value=\"<%=RS2(\"Name\")%>\"></td>
</tr>
<tr>
        <td width=\"50%\">Beskrivelse</td>
       
        <td width=\"50%\">
  <textarea rows=\"20\" name=\"text\" cols=\"80\"><%=rs2(\"Descriptionst\")%></textarea>
        </td>
</tr>
<tr>
        <td width=\"50%\">Fil</td>
        <td width=\"50%\">
       
  <input type=\"text\" name=\"Navn\" size=\"30\" value=\"<%=RS2(\"Path\")%>\"></td>
</tr>
 
<td width=\"78%\" colspan=\"2\"><p align=\"left\">
<%
\'Rs.Close
set ObjCmd = Nothing
ObjCon.Close
set objCon = Nothing


\'response.write Replace(server.htmlencode(rs(\"text\")), vbCrLf, \"<BR>\")
%>

  <p align=\"center\"><input type=\"submit\" value=\"Update\" name=\"B1\"><input type=\"reset\" value=\"Reset\" name=\"B2\"></p>

 
  <p>&nbsp;</p>
</form>




</table>
Avatar billede it-avisen.dk Nybegynder
21. januar 2001 - 18:43 #4
prøv at ændre linien objCmd.CommandText = \"select *  from [Category]  ORDER BY [Category_Name]\"

til :

objCmd.CommandText = \"select id,Category_Name,text  from [Category]  ORDER BY [Category_Name]\"
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
Kurser inden for grundlæggende programmering

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