Just nu i M3-nätverket
Gå till innehåll
Roger W

Skapa nytt fält i MSACCESS-tabell med parameteriserad Query

Rekommendera Poster

Roger W
Postad (redigerade)

Se nedan

 

textv = "Text" 'Fälttyp

namnv = "NAGOTNAMN" 'Namn på kolumnen

Set OBJdbConnection = Server.CreateObject("ADODB.Connection")
OBJdbConnection.open "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=" & Session("trointpath")
Set objCmd  = Server.CreateObject("ADODB.Command")
Set AddFieldToTable   = Server.CreateObject("ADODB.Recordset")
Set objCmd.ActiveConnection = ObjdbConnection
objCmd.CommandText = "Alter Table Setup add COLUMN ? ?(?)"
objCmd.CommandType = adCmdText

 

Set PARAMETER3 = Objcmd.CreateParameter("NAMN", adVarChar,adParamInput,255,0)
objCmd.Parameters.Append PARAMETER3
PARAMETER3.Value = namnv    
        
Set PARAMETER2 = Objcmd.CreateParameter("TYP", adVarChar,adParamInput,255,0)
objCmd.Parameters.Append PARAMETER2
PARAMETER2.Value = textv                
        
Set PARAMETER1 = Objcmd.CreateParameter("VARDE", adInteger,adParamInput)
objCmd.Parameters.Append PARAMETER1
PARAMETER1.Value = 255            
        
AddFieldToTable.Open objCmd

 

DBMS: MS Access

Jag har suttit hela kvällen och fajtats med koden ovan och börjar nu att ge upp. Jag börjar tro att det inte går att lägga till en kolumn i en MS Access-tabell med parameteriserade queries. Det enda som händer är att jag får följande meddelande:

 

Microsoft JET Database Engine error '80040e14'

Syntaxfel i fältdefinition.

/ti_org/trointsys/TINT/new1.asp, line 36

 

Fyller jag i värden direkt i objCmd.CommandText = "Alter Table Setup add COLUMN NAGOTNAMN Text(100)" fungerar det som det skall. Alla andra parameteriserade Queries jag har (hundratals) fungerar som de skall.

 

Hittar märkligt lite på Internet. Testat allt jag hittat utan success. Kunskapen sviktar. Någon som kan leda mig rätt?

 

PS Jodå, jag vet att MS Access är öken som databas. Men jag äger inte produkten, och kan inte byta. Bara att gilla läget..

 

 

Roger
      

Redigerad av Roger W

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Roger W
Postad (redigerade)

 

"You can add parameters to any of the following types of queries:
 * Select
 * Crosstab
 * Append
 * Make-table
 * Update"  :(

 

 

 

Glömde skriva att SQL-anropet som alltså inte vill riktigt kommer från en ASP-VBSCRIPT - sida..

Redigerad av Roger W

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Cluster

Jo, förstod det men jag tror (baserat på ovan länk) att access-motorn inte tillåter parameteriserade frågor för verbet Alter.

 

Verkar alltså tyvärr som att du med asp-kod får bygga upp kommandosträngen.

(plus då naturligtvis skapa de indata/säkerhetskontroller som parameteriseringen annars hade hanterat åt dig).

Eller ställa dig frågan om du verkligen skall hantera dessa tabelländringar så dynamiskt/programmatiskt...

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Roger W
Postad (redigerade)

Jo, förstod det men jag tror (baserat på ovan länk) att access-motorn inte tillåter parameteriserade frågor för verbet Alter.

 

Verkar alltså tyvärr som att du med asp-kod får bygga upp kommandosträngen.

(plus då naturligtvis skapa de indata/säkerhetskontroller som parameteriseringen annars hade hanterat åt dig).

Eller ställa dig frågan om du verkligen skall hantera dessa tabelländringar så dynamiskt/programmatiskt...

 

Jag har gett upp paramaterspåret..

 

Detta håller på att gå mig på nerverna..

 

Jag gjorde om hela skiten till:

 

<% On Error Resume Next

 

typ="Tal"

fnamn="TESTFALT"

storl=150

 

Session("p_path") = "Sökväg till Accessdatabasen"

 

Set OBJdbConnection = Server.CreateObject("ADODB.Connection")

OBJdbConnection1.open "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=" & Session("p_path")

        

        If typ = "Tal" Then

        response.write("Tal<br>")

            Qaddfield = "Alter Table Setup add COLUMN "&fnamn&" Number"

            else ' EJ tal     

            Qaddfield= "Alter Table Setup add COLUMN "&fnamn&" "&typ&" ("&storl&")"

        end if

        AddFieldToTable=OBJdbConnection1.Execute(Qaddfield)

%>

 

Den här löjliga koden ger mig följande felmeddelande:

 

Microsoft JET Database Engine error '80004005'

Det finns för många fält definierade.

/ti_org/trointsys/TINT/singel.asp, line 29

 

Tar jag bort "On Error Resume next" högst uppe på sidan försvinner felmeddelandet, men det händer inget i tabellen..

 

Har någon skarpa ögon och kan se/förstår vad det är som händer?

 

R

Redigerad av Roger W

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Cluster

Om du skriver ut Qaddfield ser den då korrekt ut och om du kopierar den texten och kör den i skriptet lirar det då?

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Roger W

Om du skriver ut Qaddfield ser den då korrekt ut och om du kopierar den texten och kör den i skriptet lirar det då?

 

Alter Table Setup add column TESTNAMN Number resp Alter Table Setup add column TESTNAMN Text(50)

dvs ser ut som den skall göra..

 

Jag skall skriva om koden och testa. Har varit med om det förr. Ägnat dagar åt felsökning och till sist hittar man nåt löjligt skitfel. Hade man skrivit om hade det tagit ett par timmar.. Detta HAR fungerat och SKALL fungera. Men jag ser inte felet.

 

Om man hade bra debuggingverktyg att jobba med... :-/

 

R

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...