Avatar billede softtail Nybegynder
07. december 2007 - 10:57 Der er 29 kommentarer

Run-time error 3146

Hej eksperter!

Jeg har en Access 2003 applikation, der fungerede som frontend til SQL Server 7.

Nu har jeg opgraderet SQL Serveren til SQL Server 2005 SP2 og så kan jeg pludselig ikke foretage sletninger i en tabel i databasen fra Access 2003?!?

Jeg får følgedne fejlmeddelelse: Run-time error 3146 ODBC--call failed.

Jeg har intet ændret i koden udover at jeg i "Styring af sammenkædede tabeller" har ændret den placeringen af databasen på den nye server.

Kodelinjerne, der nu er årsagen til fejlen ser ud som følger:
sql2 = "delete from tblEmne where bilagsnr='" & Me.Bilagsnummer & "'"
CurrentDb.QueryDefs("DynamsikPass").sql = sql2
CurrentDb.QueryDefs("DynamsikPass").Execute

Fejlårsagen skyldes ikke manglende brugerrettigheder på SQL Server.

Er der nogen, der kan anvise hvordan jeg slipper for fejlen
Run-time error 3146 ODBC--call failed ?
Avatar billede terry Ekspert
07. december 2007 - 11:29 #1
If yo make a delete query can you delete? Are you allowed to add records?

If not make sure that you have a primary key on the tables,  it s a while since I worked with ODBC linked tables but I seem to recall that you have to specify a primary key when you create the link.
Avatar billede softtail Nybegynder
07. december 2007 - 12:30 #2
Ja, jeg kan godt læse og oprette data. Jeg kan bare ikke slette data med funktionen CurrentDb.QueryDefs("DynamsikPass").Execute.

På pcreview.co.uk har jeg fundet følgende løsning:
I dont know if that the case, but when I moved from access 97 to Access 2003,
I work with reference to other mdb's, and I got that message because I used
the
Set db = CurrentDb
but when I changed it to
Set db = Codedb
It worked fine, don't know why.

Er der nogen, der kan oplyse hvor i Access jeg skal indsætte linjen "Set db = Codedb"?
Avatar billede softtail Nybegynder
07. december 2007 - 12:44 #3
Jeg glemte at nævne, at der er angivet primærnøgler på alle tabellerne i databasen.
Avatar billede terry Ekspert
07. december 2007 - 12:58 #4
try
Docmd.runsql  "delete from tblEmne where bilagsnr='" & Me.Bilagsnummer & "'"
Avatar billede terry Ekspert
07. december 2007 - 13:00 #5
Set db = Codedb

If never heard of CodedB
Avatar billede terry Ekspert
07. december 2007 - 13:02 #6
try codedb.querydefs in place of currentdb.querydefs
Avatar billede softtail Nybegynder
07. december 2007 - 13:21 #7
Jeg har prøvet det, men det gav en fejl, da codedb ikke var en kendt variabel.
Avatar billede terry Ekspert
07. december 2007 - 13:34 #8
Did you try

Docmd.runsql  "delete from tblEmne where bilagsnr='" & Me.Bilagsnummer & "'"


Try this too

Dim dbs As Database
Set dbs = CodeDB
dbs.QueryDefs("DynamsikPass").sql = sql2
dbs.QueryDefs("DynamsikPass").Execute
Avatar billede softtail Nybegynder
10. december 2007 - 10:15 #9
Docmd.runsql  "delete from tblEmne where bilagsnr='" & Me.Bilagsnummer & "'"

virkede heller ikke, men det gave en ny fejltype:
"Run-time error '3078'"
Avatar billede softtail Nybegynder
10. december 2007 - 10:17 #10
Jeg har prøvet

Dim dbs As Database
Set dbs = CodeDB
dbs.QueryDefs("DynamsikPass").sql = sql2
dbs.QueryDefs("DynamsikPass").Execute

men det virkede heller ikke. Resultatet er stadig en Run-time error 3146.
Avatar billede terry Ekspert
10. december 2007 - 12:04 #11
If you open the table directly in Access can you delete?
If you cant I think you need to look at permissions on the SQL Server.
Avatar billede softtail Nybegynder
10. december 2007 - 12:40 #12
Ja, jeg kan godt slette direkte i den sammenkædede tabel fra tabelvisningen i Access.

Jeg er i øvrigt DBO i databasen på SQL Serveren.
Avatar billede terry Ekspert
10. december 2007 - 13:54 #13
Run-time error 3078 The Microsoft Jet database engine cannot find the input table or query". Make sure it exists and that its name is spelled correctly. ...

Is this the error you get?

I wouldnt have thought it necessary but you could try puting dbo in front of your table name
dbo.tblEmne
Avatar billede softtail Nybegynder
10. december 2007 - 14:39 #14
Ja, det er fejltypen. Jeg har allerede forsøgt mig med, at kalde tabellen for dbo_tblEmne, Fugl.dbo.tblEmne eller dbo.tblEmne, men fejlen var den samme.

Igen kan jeg nævne, at Access 2003 virkede fint i samspil med SQL Server 7. Jeg har således ikke ændret noget i Access-delen udover det med sammenkædet tabelstyring.
Avatar billede terry Ekspert
10. december 2007 - 18:35 #15
I'm sure it has somethng to do with the table name.

If you make delete query can you delete? Dont write the SQL in the SQL window, add the table as you would do with a select query.
Avatar billede softtail Nybegynder
11. december 2007 - 11:04 #16
Jeg har indsat nedenstående errorhandler i koden:

Exit Sub
ErrHandler:
Dim msg As String, e As DAO.Error
For Each e In DBEngine.Errors
If e.Number <> 3146 Then
msg = msg & vbCrLf & e.Description
End If
Next e
MsgBox Err.Description & msg
End Sub

det har bevirket, at jeg nu får fejlmeddelelsen:

ODBC: kaldet lykkedes ikke.
[Microsoft][odbc SQL Server Driver][Sql Server]Could not run BEGIN TRANSACTION in database ‘bilag’ because the database is read-only.

Objektet CurrentDB tilgår tilsyneladende den gamle database, der er sat til Read Only, på den gamle SQL Server.

Er der nogen, der ved hvordan man globalt sætter connectionstring til CurrentDB i Access 2003? Det er tilsyneladende ikke nok, at jeg har brugt funktionen Sammenkædet Tabelstyring for alle tabellerne, så de peger på den nye server og nye database.
Avatar billede terry Ekspert
11. december 2007 - 11:13 #17
I'm puzzled!
Are you saying that the linked tables are linked to the OLD database? If so, why is it read-only now and not before?

Cant you just remove the linked tables and then link them again? Have you changed the ODBC data source to use the new dB?
Avatar billede softtail Nybegynder
11. december 2007 - 11:40 #18
Det er stadig Run-time error 3146 ODBC--call failed, men den anden error-message er bare den mere sigende:

ODBC: kaldet lykkedes ikke.
[Microsoft][odbc SQL Server Driver][Sql Server]Could not run BEGIN TRANSACTION in database ‘bilag’ because the database is read-only.

Så lige nu er problemet kun, at CurrentDB tilsyneladende peger på den gamle database på SQL Server 7, men de sammenkædede tabeller peger alle på den nye SQL Server 2005.

Jeg forstår ikke hvorfor CurrentDB husker den gamle database?

Access 2003 frontenden er i øvrigt oprindelig konverteret fra en Access 97. Jeg ved ikke om den oplysning er nogen hjælp?
Avatar billede terry Ekspert
11. december 2007 - 12:30 #19
Try making a new dB and link the tables.

Then in the debug window (CRTL+G) write

Docmd.runsql  "delete from tblEmne where bilagsnr='" & Me.Bilagsnummer & "'"
Avatar billede terry Ekspert
11. december 2007 - 12:30 #20
If you get the same error here then it has nothing to do with the connection string
Avatar billede terry Ekspert
11. december 2007 - 12:31 #21
"....den gamle database, der er sat til Read Only, på den gamle SQL Server."
Is this something you have done?
Avatar billede softtail Nybegynder
11. december 2007 - 12:52 #22
I en helt ny Access-database har jeg linket til tabellen tblemne på den nye database på den nye SQL Server.

I Immediate-vinduet har jeg skrevet
DoCmd.RunSQL "delete from dbo_tblemne where id = 99"

Det virkede fint og jeg kunne slette posten.
Avatar billede softtail Nybegynder
11. december 2007 - 12:56 #23
Ja, det er mig, der har sat den gamle database til Read Only netop for at undgå den skulle blive brugt ved en fejl. Jeg har nu deattached den gamle database på den gamle SQL Server 7.

Det bevirker at jeg nu får fejlmeddelelsen:
ODBC: Tilslutningen til "Fugl" lykkedes ikke.
ODBC: Tilslutningen til "Fugl" lykkedes ikke.

hvor jeg før fik fejlmeddelelsen:
ODBC: kaldet lykkedes ikke.
[Microsoft][odbc SQL Server Driver][Sql Server]Could not run BEGIN TRANSACTION in database ‘bilag’ because the database is read-only.
Avatar billede terry Ekspert
11. december 2007 - 13:03 #24
If it sworking in the new dB try importing the objects from the OLD dB.
Avatar billede softtail Nybegynder
11. december 2007 - 13:40 #25
Jeg har oprettet en ny Access-database og har importeret abeller, forespørgsler, formularer, rapporter, makroer og moduler fra den oprindelige Access-database, men jeg får igen fejlen:
ODBC: Tilslutningen til "Fugl" lykkedes ikke.
ODBC: Tilslutningen til "Fugl" lykkedes ikke.

når CurrentDb.QueryDefs("DynamsikPass").Execute bliver kaldt i koden.
Avatar billede terry Ekspert
11. december 2007 - 14:15 #26
I think I'm out of suggestions
Avatar billede softtail Nybegynder
11. december 2007 - 14:47 #27
Du har ikke tilfældigvis kendskab til et værktøj, der kan ekstrahere alt kildekoden i en Access-database, så man måske kan søge efter det "hemmelige" sted, hvor connectionstring bliver initialiseret?
Avatar billede terry Ekspert
11. december 2007 - 14:55 #28
If you have re-linked the tables from the new 2005 server I dont see ho wyou have a connection string to the old, unless you re-link in code!

its possible to link to tables from more than one dB so the connectionstring is in each table.

Here is link which lets you re-link the tables in code.
http://www.mvps.org/access/tables/tbl0010.htm
Avatar billede terry Ekspert
08. januar 2008 - 18:26 #29
status?
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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