🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.bazy-danych.msaccess
6 messages
6 total messages Started by minfo Mon, 16 Oct 2017 14:37
wywołanie kwerendy bez zapisywania qd
#137538
Author: minfo
Date: Mon, 16 Oct 2017 14:37
5 lines
1460 bytes
Witam,
Czy jest możliwe uruchomienie kwerendy wybierającej (Select) bez utworzenia qd i potem jego wywołania DoCmd.OpenQryDef?
Nie chciałbym jak to mam teraz zakładać nazwanej kwerendy. Wolałbym po "cichu" wywołać kwerendę z poskładanego przed momentem Sqla.

MF
Re: wywołanie kwerendy bez zapisywania qd
#137539
Author: minfo
Date: Mon, 16 Oct 2017 18:35
40 lines
2388 bytes
obecnie mam tak:

Sub myQry()
...

sSQL = "SELECT c.INDEKS, d.WAGA*c.[DILOSC] AS WAGA " & _
"FROM tbl_" & sRM AS c INNER JOIN mg00imni AS d ON c.INDEKS = d.INDEKS ;"


If DCount("*", "MSysObjects", "Name = 'myQuery'") <> 0 Then
DoCmd.DeleteObject acQuery, "myQuery"
End If

Set qd = db.CreateQueryDef("myQuery", sSQL)

DoCmd.OpenQuery "myQuery"

End Sub


Chciałbym wywołać sSQL bez konieczności zakładania kwerendy "myQuery".
Pewnie ograniczeniem jest moja niewiedza...
Czy da się to zrobić inaczej niż jest napisane powyżej?


Kombinowałem jeszcze tak:

Dim con As ADODB.Connection
Set con = CurrentProject.Connection


con.Execute sSQL


Nie skończyło się błędem jak w przypadku
qd.Execute informującym o próbie wywołania innego typu kwerendy niż funkcyjna ale nie pokazał mi się w Accesie grid z danymi wynikowymi.
I nie wiem czemu...


MF
Re: wywołanie kwerendy bez zapisywania qd
#137540
Author: LeszekN
Date: Tue, 17 Oct 2017 06:48
15 lines
2048 bytes
Dim db as database
Dim sSql as string
Dim rs as recordset

sSQL = "SELECT c.INDEKS, d.WAGA*c.[DILOSC] AS WAGA " & _
"FROM tbl_" & sRM AS c INNER JOIN mg00imni AS d ON c.INDEKS = d.INDEKS ;"
'Nie wnikam w poprawność stringu

Set db = DBEngine(0)(0)
Set rs = CurrentDb.OpenRecordset(sSQL)


w tym momencie możesz zrobić z danymi co chcesz, dane są w recordsecie czyli rs

Jeżeli dane chcesz wyświetlić tylko na ekran to prościej zrobić raport lub formularz, bez kombinowania w kodzie, lub wykorzystać recordset jako źródło danych dla raportu lub formularza.
Re: wywołanie kwerendy bez zapisywania qd
#137541
Author: minfo
Date: Tue, 17 Oct 2017 08:13
23 lines
2377 bytes
... 
> Set db = DBEngine(0)(0)
> Set rs = CurrentDb.OpenRecordset(sSQL)
> 
> 
> w tym momencie możesz zrobić z danymi co chcesz, dane są w recordsecie czyli rs
> 
> Jeżeli dane chcesz wyświetlić tylko na ekran to prościej zrobić raport lub formularz, bez kombinowania w kodzie, lub wykorzystać recordset jako źródło danych dla raportu lub formularza.

Dzięki za odpowiedź! 
SQL string działa jak poniżej.

Podaję parametr sRM pobierany przez InputBoxa:
sSQL = "SELECT c.INDEKS, d.WAGA*c.DILOSC AS WAGAC " & _ 
"FROM tbl_" & sRM & " AS c INNER JOIN mg00imni AS d ON c.INDEKS = d.INDEKS;"

Na razie realizuję etap wyrzucenia kwerendy na ekran.
Tak na prawdę to zamierzam wyrzucić grid kwerndy do txt, csv lub xml.
Czekam na format pliku od firmy obsługującej ERPa.

Czy rekordseta będzie można wrzucać bezpośrednio do csv?

MF
Re: wywołanie kwerendy bez zapisywania qd
#137542
Author: minfo
Date: Tue, 17 Oct 2017 08:22
21 lines
2082 bytes
Poniżej fragment kodu, który tak naprawdę mi się nie podoba (choć działa).


If DCount("*", "MSysObjects", "Name = 'myQueryZP'") <> 0 Then
DoCmd.DeleteObject acQuery, "myQueryZP"
End If

Set qd = db.CreateQueryDef("myQueryZP", sSQL)

DoCmd.OpenQuery "myQueryZP"

qd.Close
Set db = Nothing

End Sub


Czy kwerendy wybierające nie można wywoływać "po cichu" bez zakładania nazwanej kwerendy w kolekcji? Niestety db.Execute czy con.Execute są tylko przeznaczone do kwerend funkcjonalnych.

/
MF
Re: wywołanie kwerendy bez zapisywania qd
#137543
Author: LeszekN
Date: Tue, 17 Oct 2017 09:06
11 lines
2260 bytes
> Czy rekordseta będzie można wrzucać bezpośrednio do csv?
Tak można, do csv xml czy txt to ty decydujesz co się stanie z danymi w recordsecie.

>Czy kwerendy wybierające nie można wywoływać "po cichu" bez zakładania nazwanej kwerendy w kolekcji?
znaczy chcesz wywołać obiekt który nie istnieje w kolekcji? 
Jak to piszesz "po cichu" można wykonać polecenie SQL w kodzie VBA  
Dane zwrócone czy przez kwerendę czy recordset będą identyczne.

jezeli już tworzysz kwerendę, to po wykorzystaniu ją usuń

DoCmd.DeleteObject acQuery, "myQueryZP"
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads