Piotr R.

Piotr R. Kierownik działu
jakości

Temat: Kwerenda SQL przez VBA

Witam, potrzebuje uruchomic prosta kwerende wybierajaca poprzez VBA (podpieta pod przycisk w formularzu).

W SQLu wyglada tak i dziala:

SELECT tblREKLAMACJE.KodDostawcy, tblREKLAMACJE.NumerReklamacji
FROM tblREKLAMACJE
WHERE tblREKLAMACJE.KodDostawcy='BEMIS' AND tblREKLAMACJE.NumerReklamacji Like '*1008*';

W VBA wyglada tak i nie dziala (zliczanie rekordow zwraca 0)

SQLSTMT = "SELECT tblREKLAMACJE.KodDostawcy, tblREKLAMACJE.NumerReklamacji FROM tblREKLAMACJE WHERE tblREKLAMACJE.KodDostawcy='" & KodDostawcy & "' AND tblREKLAMACJE.NumerReklamacji Like '*1008*';"

Lecz, gdy na podstawie zawartosci stringa SQLSTMT stworze kwerende w widoku SQL to znow dziala. Ki diabel?

Bede wdzieczny za pomoc.
Piotrek
Marcin Ziemian

Marcin Ziemian Administrator
systemów, Raton
Systemy
Informatyczne

Temat: Kwerenda SQL przez VBA

W jaki sposób pobierasz dane przez VBA? ADODB, czy DAO?
Pokaż definicję recordset-u i w jaki sposób chcesz zliczyć wyniki, a także jaką wartość podstawiasz pod zmienną KodDostawcy.
Niestety, moja szklana kula gdzieś się zagubiła, a na nową mnie nie stać ;)

Możesz jeszcze spróbować zdefiniować kwerendę parametryczną i taką spróbować odpalić z VBA przekazując jej odpowiednią wartość do parametru.
Piotr R.

Piotr R. Kierownik działu
jakości

Temat: Kwerenda SQL przez VBA

Szklana kula dobra rzecz:)

Rekordset wyglada tak:

Dim rsRekordy As New ADODB.Recordset
Dim SQLSTMT As String

KodDostawcy = Me!cmbKodDostawcy.Value

Kwerenda przez VBA tak (choc docelowo chce podawac jej wiecej parametrow):

SQLSTMT = "SELECT tblREKLAMACJE.KodDostawcy, tblREKLAMACJE.NumerReklamacji FROM tblREKLAMACJE WHERE tblREKLAMACJE.KodDostawcy='" & KodDostawcy & "' AND tblREKLAMACJE.NumerReklamacji Like '*1008*';"

Jesli zawartosc pola tekstowego wrzuce do kwerendy w widoku SQL, to otzymuje zestaw rekordow

Tekst93.Value = SQLSTMT

Ale jesli otwieram kwerende przez VBA..

rsRekordy.Open SQLSTMT, CurrentProject.Connection, adOpenStatic, adLockReadOnly

..to rsRekordy.RecordCount zwraca mi 0

Przy czym dzieje sie tak, gdy do kwerendy dodaje drugi parametr (Like '*1008*'). Przy jednym parametrze dziala ok.

Pewnie popelnilem gdzies jakis prosty blad ale nie moge sie go dopatrzyc.

konto usunięte

Temat: Kwerenda SQL przez VBA

Mialem kiedys podoby przypadek i nie wiedzialem gdzie jest blad.
Odpowiedz byla dla mnie dziwna ale prosta
Kombinacja użycia znakow & " ; w VBA nie jest taka sama jak w MS Access.
Jeżeli masz kogos po reka od VBA powinien Ci pomoc jezeli nie to najlepiej zapytaj na forum specow od VBA
pzdrMariusz P. edytował(a) ten post dnia 05.10.08 o godzinie 12:53

konto usunięte

Temat: Kwerenda SQL przez VBA

Masz tu przykład oparty o bazę Northwind, zmień sobie tylko ścieżkę do bazy, bo możesz mieć inną:


Sub CheckConnection()
Dim cn As New Connection
Dim rs As New Recordset
Dim dbPath As String
Dim sql As String

Set cn = New Connection
Set rs = New Recordset

dbPath = "C:\bazy\Northwind.mdb"

cn.Provider = "Microsoft.Jet.OLEDB.4.0"
cn.ConnectionString = "Data Source=" & dbPath
cn.Open

sql = "SELECT CustomerID FROM Customers WHERE CustomerID Like ""%A%"""
rs.Open sql, cn, adOpenKeyset, adLockOptimistic
If Not rs.EOF Then
MsgBox "Like sposób 1: " & rs.RecordCount
End If
rs.Close

sql = "SELECT CustomerID FROM Customers WHERE CustomerID Like '%A%'"
rs.Open sql, cn, adOpenKeyset, adLockOptimistic
If Not rs.EOF Then
MsgBox "Like sposób 2: " & rs.RecordCount
End If
rs.Close

cn.Close

Set rs = Nothing
Set cn = Nothing
End Sub


Problemem w Twoim zapytaniu nie jest opakowanie stringa sql-owego w apostrofy czy cudzysłowy, tylko gwiazdka. Zamiast gwiazdki użyj procencika w stringu sql-oqym.Paweł K. edytował(a) ten post dnia 06.10.08 o godzinie 00:04
Marcin Ziemian

Marcin Ziemian Administrator
systemów, Raton
Systemy
Informatyczne

Temat: Kwerenda SQL przez VBA

Otóż to :)

Jeśli używasz ADODB, to musisz stosować składnię SQL-a podobną do MSSQL (bo ADO zostało zaprojektowane głównie do komunikacji klient-serwer). Mógłbyś użyć semantyki access-owej tylko w przypadku użycia obiektów typu DAO.Recordset (wszak kwerendy accessowe komunikują się własnie przy użyciu MSJET.DAO ;))

Pozdro i powodzenia!
Piotr R.

Piotr R. Kierownik działu
jakości

Temat: Kwerenda SQL przez VBA

Czyli jednak upierdliwy szczegół :)
Teraz działa jak należy. Dzięki, poratowaliście mnie.

Sa jeszcze jakieś różnice w znakach, bądź operatorach, na które mogę się nadziać?
Marcin Ziemian

Marcin Ziemian Administrator
systemów, Raton
Systemy
Informatyczne

Temat: Kwerenda SQL przez VBA

Chyba nie, chociaż kiedyś widziałem składnię SQL-a, gdzie zamiast "Like" było "ALike"... Ale nie pamiętam, gdzie i w jakim kontekście.
Pozdro

Następna dyskusja:

Problem z Dlookup vba sql (...




Wyślij zaproszenie do