Limite Recordset in update database

  • Creatore Discussione Creatore Discussione il_betto
  • Data di inizio Data di inizio

il_betto

Utente Attivo
23 Mar 2007
42
0
0
Ciao a Tutti !!
Ho il seguente problema "attanagliante "

Ho la pagina index.asp, che apro con Explorer, che contiene diversi moduli che richiamano i valori dei campi di un database Access ...
Tale pagina contiene un pulsante "Salva" che fa l' aggiornamento di tali campi una volta che uno ha scelto i valori giusti all' interno dei vari menu' a tendina

fin qui tutto OK !!
Pero' mi e' sucesso che, inserendo nel Database piu' di 101 campi, al momento dell' aggiornamento del Database col pulsante "Salva" mi e' apparso l' errore


Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][Driver ODBC Microsoft Access] Espressione troppo complessa
aggiorna.asp, line 120


Mi e' sembrato un limite di buffer, vuoi che la funzione Update di un Recorset non riesca a supportare un numero di campi > 101 ?? E' per questo che chiedo il vostro aiuto perche' non so cosa devo fare

Ho provat oanche con response.buffer ma niente !!
Ho letto poi nel sito della microsoft che e' un problema legato all' uso di ADODB.Recordet che e' limitato;
Sono costretto in tutti i modi a ricorrere ad una UPDATE classica (il cui codice non conosco) oppure IN QUALCHE MODO si puo' salvare questo lavoro che ho fatto e che mi e' costato dei mesi ??

Grazie mille per l' aiuto !!!


Pagina Index.asp

<%@ Language=VBScript %>
<% Option Explicit
Dim check, nr, objConn, objRS, objRS2, rec, strSQL
'
check = 0
nr = 0
rec = 1
'
if trim(request("rec"))<>"" then rec = Request("rec")
%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>SSD</title>
<Script Language="JavaScript">
function notify(n) {
if (n==0) {
var answer = confirm("Salvare le modifiche?")
if (answer) {
document.FrontPage_Form.action = "aggiorna.asp"
document.FrontPage_Form.submit();
return true; } }
}
</script>
</head>

<body>
<%
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.ConnectionString = "DSN=ssd09.dsn"
objConn.Open
'
Set objRS2 = Server.CreateObject("ADODB.Recordset")
objRS2.Open "t_check", objConn, , 3, 2
Do While Not objRS2.EOF
If (objRS2("Numero") = Cint(rec)) Then
strSQL = "SELECT * FROM t_check WHERE Numero = " & rec
Set objRS = objConn.Execute(strSQL)
check = check + 1
End If
objRS2.MoveNext
nr = nr + 1
Loop
If (check = 0) Then
rec = 1
strSQL = "SELECT * FROM t_check WHERE Numero = " & rec
Set objRS = objConn.Execute(strSQL)
End If
'
%>

<form method="POST" webbot-onSubmit language="JavaScript" name="FrontPage_Form">
<table>
<td width="104" align="center" height="24">
<p style="margin-top: 10px">
<select size="1" name="arrivo_camp" id="arrivo_camp" style="font-family: Arial; font-size: 10 pt; width: 80">
<option selected><%=objRS("Arrivo_Camp")%></option>
<option>184</option>
<option>190</option>
<option>P291</option>
<option>P294</option>
</select></td>
....................
<input type="submit" name="salva" value="Salva" onClick="notify(0)">
.......................
</table></form>
<%
objRS.Close
objRS2.Close
objConn.Close
Set objConn = Nothing
%>

Pagina aggiorna.asp

<%@ Language=VBScript %>
<%
Option Explicit
Dim objConn, objRS, rec
'
rec = Cint(Request.Form("rec_mod"))
'
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.ConnectionString = "DSN=ssd09.dsn"
objConn.Open
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open "t_check", objConn, , 3, 2
'
Do While Not objRS.EOF
If (objRS("Numero")=rec) Then
objRS("Arrivo_Camp") = Request.Form("arrivo_camp")
objRS("Arrivo_Proc") = Request.Form("arrivo_proc")
...... di questi ne ho piu' di 100 !!! <----
'
objRS.Update
'
End If
objRS.MoveNext
Loop
'
objRS.Close
Set objRS = Nothing
objConn.Close
Set objConn = Nothing
%>

<HTML>
<BODY> ...... ... </BODY>
</HTML>
 
Nella pagina index.asp ho lasciato tutto invariato,
mentre nella pagina aggiorna.asp ho fatto i seguenti cambiamenti:

<%@ Language=VBScript %>
<%
Option Explicit
Dim objConn, objRS, rec, sql
'
rec = Cint(Request.Form("rec_mod"))
'
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.ConnectionString = "DSN=ssd09.dsn"
objConn.Open
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open "t_check", objConn, , 3, 2
'
Do While Not objRS.EOF
If (objRS("Numero")=rec) Then
sql = "UPDATE t_check SET Camp='"& Request.Form("camp") &"', " & _
"Proc='"& Request.Form("proc") &"', " & _
"Rep='"& Request.Form("rep") &"', " & _
.........
"Vel='"& Request.Form("vel") &"' WHERE Numero =" & rec & ""
objConn.Execute(sql)
'
End If
objRS.MoveNext
Loop
'
objRS.Close
Set objRS = Nothing
objConn.Close
Set objConn = Nothing
%>

<HTML>
<BODY>
........
</BODY>
</HTML>

fin qui tutto OK !!!

Il problema e' che ho una tabella t_check di 131 campi e questa quesy di UPDATE funziona solo per 127 campi, me ne rimangono fuori 4 !!

Come mai c' e' questo limite ??
L' errore che mi dice e': "Troppi campi definiti"

Come si puo' superare questo limite e far aggiornare gli ultimi 4 campi che mi rimangono ?? :confused: :dipser:

Grazie per l' aiuto !!
 
Ho finalmente risolto il problema cosi':
Se qualcuno avesse una soluzione migliore, sono sempre tutto orecchie !!!

<%@ Language=VBScript %>
<%
Option Explicit
Dim objConn, objRS, rec, sql, sql2
'
rec = Cint(Request.Form("rec_mod"))
'
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.ConnectionString = "DSN=ssd09.dsn"
objConn.Open
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open "t_check", objConn, , 3, 2
'
Do While Not objRS.EOF
If (objRS("Numero")=rec) Then
sql = "UPDATE t_check SET Camp='"& Request.Form("camp") &"', " & _
"Proc='"& Request.Form("aesi_proc") &"', " & _
......
"Vel='"& Request.Form("vel") &"' WHERE Numero =" & rec & ""
objConn.Execute(sql)
sql2 = "UPDATE t_check SET Ore_P='"& Request.Form("ore_p") &"', " & _
"Ore_S='"& Request.Form("ore_s") &"' WHERE Numero =" & rec & ""
objConn.Execute(sql2)
'
End If
objRS.MoveNext
Loop
'
objRS.Close
Set objRS = Nothing
objConn.Close
Set objConn = Nothing
%>

<HTML>
<BODY>
....</BODY>
</HTML>

0:)
 

Discussioni simili