Benutzer mit den meisten Antworten
SQL funktioniert in Access aber nicht aus VB.NET heraus

Frage
-
Hallo Leute,
ich habe ein Projekt, dass mit einer Access-Datenbank versehen ist (Office 2007). Ich möchte gerne folgende Abfrage ausführen:SELECT COUNT(rechteid) AS Total FROM tblrechte WHERE rollenid = 3 AND form = 'Form1' AND funktion = 'abbrechenButton';
Das Witzige ist, dass der SQL-Code direkt in Access ausgeführt wird und ich die erwartete Antwort zurück bekomme.
Mit:
Dim conn As New OleDbConnection(connstr) Dim strSQL As String = "" strSQL = "SELECT COUNT(rechteid) AS Total FROM tblrechte WHERE rollenid = 3 AND form = 'Form1' AND funktion = 'abbrechenButton';"
Dim cmd As New OleDbCommand(strSQL, conn) cmd.CommandType = CommandType.Text Dim iAnz As Integer = 0 Try conn.Open() iAnz = cmd.ExecuteScalar() bSuccess = True Catch ex As Exception iAnz = 0 bSuccess = False Finally conn.Close() End Try Return iAnz
funktioniert die Abfrage aber nicht. Egal wieviele Datensätze mit den oben beschriebenen Bedingungen die Tabelle tblrechte enthält, ich bekomme immer 0 zurück. Seht Ihr meinen Fehler? Tausend Dank im Voraus für Eure Hilfe!
Gruß
mjanz
Antworten
-
In solchen scheinbar undurchsichtigen Fällen mache ich folgendes:Nach "iAnz = cmd.ExecuteScalar()" rufe ich eine Anzeige auf, um die Daten zuzeigen, z.B. so:
cmd.CommandText = "SELECT * FROM tblrechte WHERE rollenid = 3 AND form = 'Form1' AND funktion = 'abbrechenButton';" Dim dt As New DataTable Call (New SqlClient.SqlDataAdapter(cmd)).Fill(dt) Dim frm As New Form frm.Controls.Add(New DataGrid With {.DataSource = dt, .Dock = DockStyle.Fill}) frm.Show()
--
Viele Gruesse
Peter- Als Antwort markiert Robert Breitenhofer Freitag, 13. August 2010 16:11
Alle Antworten
-
Catch ex As Exception
iAnz = 0
bSuccess = False
Du unterdrückst jegliche Fehlernachricht. Wenn beispielsweise keine ausreichenden Zugriffsrechte vorliegen, wird das nicht erkannt und es werden 0 gelesene Datensätze als Ergebnis geliefert.--
Viele Gruesse
Peter -
Hallo Peter,
leider bekomme ich keine Fehlermeldung. Ich habe den Codeblock auskommentiert. Trotzdem ist die Antwort 0. Irgendwie kann ich den Fehler nicht finden. Die Zugriffsrechte habe ich auch. Ich mache noch weitere Abfragen auf die gleiche Tabelle (Selects, Updates, Inserts...) und auch auf andere Tabellen in der Datenbank und da habe ich keine Probleme. Irgendwie ist das wie verhext. Es klappt nicht mit dem SELECT COUNT().Trotzdem danke!
GrußMarcus
-
In solchen scheinbar undurchsichtigen Fällen mache ich folgendes:Nach "iAnz = cmd.ExecuteScalar()" rufe ich eine Anzeige auf, um die Daten zuzeigen, z.B. so:
cmd.CommandText = "SELECT * FROM tblrechte WHERE rollenid = 3 AND form = 'Form1' AND funktion = 'abbrechenButton';" Dim dt As New DataTable Call (New SqlClient.SqlDataAdapter(cmd)).Fill(dt) Dim frm As New Form frm.Controls.Add(New DataGrid With {.DataSource = dt, .Dock = DockStyle.Fill}) frm.Show()
--
Viele Gruesse
Peter- Als Antwort markiert Robert Breitenhofer Freitag, 13. August 2010 16:11
-
Hallo,
ich habe ein Projekt, dass mit einer Access-Datenbank versehen
ist (Office 2007). Ich möchte gerne folgende Abfrage ausführen:
SELECT COUNT(rechteid) AS Total FROM tblrechte WHERE
rollenid = 3 AND form = 'Form1' AND funktion = 'abbrechenButton';
Das Witzige ist, dass der SQL-Code direkt in Access ausgeführt
wird und ich die erwartete Antwort zurück bekomme.
Mit:
[code]
Dim conn As New OleDbConnection(connstr)Wie genau sieht Dein Connectionstring connstr aus?
Dim strSQL As String = ""
strSQL = "SELECT COUNT(rechteid) AS Total
FROM tblrechte WHERE rollenid = 3 AND form = 'Form1'
AND funktion = 'abbrechenButton';"Welches Ergebnis bekommst Du, wenn Du Dein SQL-Statement
so veränderst:strSQL = "SELECT COUNT(*) AS Total
FROM tblrechte WHERE rollenid = 3 AND form = 'Form1'
AND funktion = 'abbrechenButton';"Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen) -
Hi,
SELECT COUNT(rechteid) AS Total FROM tblrechte WHERE rollenid = 3 AND form = 'Form1' AND funktion = 'abbrechenButton';
kannst Du bitte mal den kompletten Try ... Catch ... End Try Kram auskommentieren. Ich hab das so verstanden also ob Du nur den Code innerhalb des Catch Zweigs auskommentiert hast.
Also so:
Dim conn As New OleDbConnection(connstr) conn.Open() Dim strSQL As String = "" strSQL = "SELECT COUNT(rechteid) AS Total FROM tblrechte WHERE rollenid = 3 AND form = 'Form1' AND funktion = 'abbrechenButton';" Dim cmd As New OleDbCommand(strSQL, conn) cmd.CommandType = CommandType.Text Dim iAnz As Integer = 0 iAnz = cmd.ExecuteScalar() Return iAnz
Ich tippe mal auf ein Problem mit dem SQL Statement, "form" und ggfs. auch "funktion" könnten reservierte Worte in Access sein. Probier mal, die als [form] und [funktion] zu schreiben.
BTW: Du solltest die Objekte auch "disposen" (also <Objekt>.Dispose() aufrufen, wenn es eine solche Methode gibt)
BTW2: Falls jemand meint, das wäre unnötig: Ist es meist nicht :)
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hallo Leuts,
entschuldigt, dass ich mich erst jetzt melde, aber ich kam in den letzten Tagen nicht zum programmieren. Über den ersten Tipp von Peter bin ich schlussendlich dem Problem auf die Schliche gekommen. Ich habe eine Klasse geschrieben, mit der ich die meisten Datenbankabfragen, Inserts und so weiter regeln möchte. Diese Klasse kommt vor allem immer dann zum Tragen, wenn ich LINQ nicht verwenden kann. Ich hatte etwas Neues ausprobiert und hatte einen klitzekleinen Denkfehler versteckt...
Ansonsten tausend Dank für Eure Hilfe!
GrußMarcus