2016-07-28 10 views
1

So habe ich diese Anwendung, und ich habe alle lokalen Tabellen mit Upsizing zu SQL Server verschoben, jetzt sind sie derzeit verknüpfte Tabellen. Ich kann auf Tabellen zugreifen und Formulare mit Bezug zu Tabellen können problemlos aufgerufen werden. Aber wenn ich programmgesteuert einen Datensatz abrufe oder eine SQL-Operation im VBA-Skript durchführe, erscheint eine Aufforderung zur SQL Server-Anmeldung, in der ich aufgefordert werde, den SQL-Authentifizierungs-Login einzugeben, um auf die Datenbank zuzugreifen.MS Access - SQL Server Login Eingabeaufforderung wird nicht

Ich folgte diesen Link hier:

https://support.microsoft.com/en-us/kb/177594

Wo dies mein Ende-Code ist:

Dim db1 As Database 
Dim db2 As Database 
Dim rs As Recordset 
Dim strConnect As String 
Set db1 = OpenDatabase("C:\Workspace\ms1.mdb") 


strConnect = UCase(db1.TableDefs("dbo_TableA").Connect) & ";UID=User1;PWD=Password1" 

Set db2 = OpenDatabase("", False, False, strConnect) 
db2.Close 
Set db2 = Nothing 
Set rs = db1.OpenRecordset("dbo_TableA") 
rs.Close 
db1.Close 
Set rs = Nothing 
Set db1 = Nothing 


DoCmd.RunCommand acCmdSaveRecord 

'Sql Server login prompt pops up after running the below code;' 
If DCount("*", "TableA", "[ColA] = [forms]![FRM_LOGS]![USER]") = 0 Then 
    MsgBox "User ID not found - contact HelpDesk", vbCritical 
    DoCmd.Quit 
    Exit Sub 
End If 

Die DCount die SQL Server-Anmeldeaufforderung auslöst. Ich brauche diese Aufforderung, um wegzugehen. Wenn ich ein Formular öffne, abfrage, berichte, alles, wo das Zugriffsobjekt an die Daten gebunden ist, bekomme ich keine Nachricht. Es passiert NUR in VBA, wenn ich versuche, auf das Datenobjekt zuzugreifen.

Bearbeiten! Ich habe den Schuldigen gefunden. Ich löschte die verknüpfte Tabelle mit der TabelleA in SQL-Server, und ich habe es erneut verknüpft, und klickte auf das Kontrollkästchen Kennwort speichern. Ich habe das vorher gemacht, und es hat nicht funktioniert. Hab es nochmal gemacht, und es hat alles repariert. Nicht sicher, warum das beim ersten Mal nicht funktioniert hat. Ich habe das Folgende als Antwort markiert, weil das das Problem angesichts der Umstände gelöst hat.

+0

Zur Verdeutlichung: Sie verwenden SQL Server-Authentifizierung (nicht Windows)? Und beim Verknüpfen der Tabellen hast du User/Passwort nicht gespeichert? Was ist 'db1', die aktuelle Frontend-Datenbank oder eine andere Datenbank, die auch Tabellen verknüpft hat? – Andre

+0

Sie könnten versuchen, entweder diese https://msdn.microsoft.com/en-us/library/ms807027.aspx oder diese https://msdn.microsoft.com/en-us/library/dd787978.aspx –

+0

@Andre db1 ist die OpenDatbase ("C: \ Workspace \ ms1.mdb") Ich setze sie in den Code über – sksallaj

Antwort

0

Nicht sicher, was Sie hier mit zwei Datenbankverbindungen tun und DCOUNT für eine interne Tabelle verwenden?

Es ist wie Ihre Datenbankverbindung aussieht hat Tabellen verknüpft, die Passwörter gespeichert haben

Warum nicht einfach das Recordset verwenden, die für einen gültigen Benutzer überprüfen funktioniert?

Set db1 = OpenDatabase("C:\Workspace\ms1.mdb") 

Set rs = db1.OpenRecordset("SELECT [ColA] FROM [dbo_TableA] WHERE [ColA] = """ & [forms]![FRM_LOGS]![USER] & """") 
if rs.EOF Then 
    MsgBox "User ID not found - contact HelpDesk", vbCritical 
    DoCmd.Quit 
    Exit Sub 
End If 

rs.Close 
db1.Close 
Set rs = Nothing 
Set db1 = Nothing 
+1

Ich folgte dem Link zur Fehlerbehebung beim SQL Server Login. Aber hey! Ihr Code funktioniert, aber ich wollte es wo jeder Ort, an dem ich einen DCount mache, funktionieren würde. Ich mag es nicht, dass ich den Code ändern muss, da er zerstreut ist. Aber das ist eine Lösung! – sksallaj