Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

kwerenda krzyzowa jako zrodlo danych w kwerendzie tworzacej tabele

1 view
Skip to first unread message

Code_rEd

unread,
May 10, 2005, 12:44:26 PM5/10/05
to
hello,
wszystko bylo by pieknie, gdyby nie fakt, ze nie chce korzystac z krzyzowki
jako obiektu, tylko chce w widoku sql utworzyc kwerende typu select * into
from zrodlo, ktora jako zrodlo ma podana krzyzowke, ale jako kod sql.
czy jest to mozliwe?
bo naormalnie rece opadaja, jak accessowy parser czepia sie tego calego
'transform' :|
--
~> pozdrawiam,
~> Code_rEd

Krzysztof Naworyta

unread,
May 11, 2005, 2:38:49 AM5/11/05
to
Code_rEd <code...@o2.pl> napisal:

| wszystko bylo by pieknie, gdyby nie fakt, ze nie chce korzystac z
| krzyzowki jako obiektu, tylko chce w widoku sql utworzyc kwerende
| typu select * into from zrodlo, ktora jako zrodlo ma podana
| krzyzowke, ale jako kod sql.
| czy jest to mozliwe?

nie jest mozliwe !

| bo naormalnie rece opadaja, jak accessowy parser czepia sie tego
| calego 'transform' :|

mnie tez opadaja, pisze w immediate: "podaj kawe", enter, a on nic ...
Mozna sie pochlastac ... :(

--
KN

Błażej Strus

unread,
May 11, 2005, 3:45:40 AM5/11/05
to
Krzysztof Naworyta napisał(a):

> mnie tez opadaja, pisze w immediate: "podaj kawe", enter, a on nic ...
> Mozna sie pochlastac ... :(

Zainstaluj sobie Mokate Add-In, a będzie hulać!
Są wprawdzie problmy z cappucino, ale idzie się przyzwyczić.

Blazek

Code_rEd

unread,
May 11, 2005, 12:16:18 PM5/11/05
to
Osoba podpisujaca sie jako Krzysztof Naworyta popelnila na
pl.comp.bazy-danych.msaccess co nastepuje:

> nie jest mozliwe !
to lipa power lipa :|


> mnie tez opadaja, pisze w immediate: "podaj kawe", enter, a on nic ...
> Mozna sie pochlastac ... :(

tu czlowiekowi leci pot z czola, a Ty sie nabijasz... ;)

dzieki za odpowiedz,

Code_rEd

unread,
May 11, 2005, 12:18:28 PM5/11/05
to
Osoba podpisujaca sie jako Błażej Strus popelnila na
pl.comp.bazy-danych.msaccess co nastepuje:

> Zainstaluj sobie Mokate Add-In, a będzie hulać!


> Są wprawdzie problmy z cappucino, ale idzie się przyzwyczić.

nieprawda! masz pewnie pirata!
add-inn 'mokate' dobrze sobie radzi z cappucino, natomiast dodatek lavazza
juz nie - ale w immediate uzyskasz dobra kawke po turecku, czy jak kto woli
plujke, gryziona, itp...

Code_rEd

unread,
May 12, 2005, 2:27:57 PM5/12/05
to
Osoba podpisujaca sie jako Krzysztof Naworyta popelnila na
pl.comp.bazy-danych.msaccess co nastepuje:

> Code_rEd <code...@o2.pl> napisal:


>
> | wszystko bylo by pieknie, gdyby nie fakt, ze nie chce korzystac z
> | krzyzowki jako obiektu, tylko chce w widoku sql utworzyc kwerende
> | typu select * into from zrodlo, ktora jako zrodlo ma podana
> | krzyzowke, ale jako kod sql.
> | czy jest to mozliwe?
>
> nie jest mozliwe !

a jest mozliwe przypisanie kodem kwerendki krzyzowej (na przyklad) do
rekordseta a potem z tegoz to rekordseta bez szurania po kazdym rekordzie
wrzucenie calosci kodem do tabeli?
jesli tak, to rozwiazanie sobie juz sam znajde, chodzi mi tylko o kwestie,
zeby nie szukac na darmo.

Krzysztof Naworyta

unread,
May 13, 2005, 6:23:52 AM5/13/05
to
Code_rEd <code...@o2.pl> napisal:

||| wszystko bylo by pieknie, gdyby nie fakt, ze nie chce korzystac z
||| krzyzowki jako obiektu, tylko chce w widoku sql utworzyc kwerende
||| typu select * into from zrodlo, ktora jako zrodlo ma podana
||| krzyzowke, ale jako kod sql.
||| czy jest to mozliwe?

|| nie jest mozliwe !

| a jest mozliwe przypisanie kodem kwerendki krzyzowej (na przyklad) do
| rekordseta a potem z tegoz to rekordseta bez szurania po kazdym
| rekordzie wrzucenie calosci kodem do tabeli?
| jesli tak, to rozwiazanie sobie juz sam znajde, chodzi mi tylko o
| kwestie, zeby nie szukac na darmo.


A nie prosciej jest zapisac "krzyzówke" jako obiekt (chocby chwilowy: "tmp")
i nastepnie

.Execute "Select * INTO NowaTabela From tmp"

???

--
KN

Code_rEd

unread,
May 13, 2005, 11:12:52 AM5/13/05
to
Osoba podpisujaca sie jako Krzysztof Naworyta popelnila na
pl.comp.bazy-danych.msaccess co nastepuje:

> A nie prosciej jest zapisac "krzyzówke" jako obiekt (chocby chwilowy:


> "tmp") i nastepnie
> .Execute "Select * INTO NowaTabela From tmp"

dziekuje za odpowiedz
duzo prosciej, prawde mowiac to wymyslilem w miedzyczasie i tak to poki co
dziala; tylko ze ja tam chce miec jak najmniej obiektow.
czyli ponawiam pytanie: czy moge jedym poleceniem zawartosc recordseta
wrzucic do tabeli?

Krzysztof Naworyta

unread,
May 13, 2005, 12:22:32 PM5/13/05
to
Juzer Code_rEd <code...@o2.pl> napisał

|| A nie prosciej jest zapisac "krzyzówke" jako obiekt (chocby chwilowy:
|| "tmp") i nastepnie
|| .Execute "Select * INTO NowaTabela From tmp"

| tylko ze ja tam chce miec jak najmniej obiektow.

to go zaraz potem skasuj, mamo ...

***
Dim sq as string
Dim db as database
Dim qr as querydef
Dim UniqueName as string

sq = "TRANSFORM ... PIVOT ...."

UniqueName = GetUniqueName(acTable)

Set db = Currentdb
set qr = db.CreateQueryDef(UniqueName)

db.execute "Select * Into Tabela1 From " & UniqueName

db.querydefs.delete UniqueName

***

funkcję GetUniqueName() napisz sobie sam !

| czyli ponawiam pytanie: czy moge jedym poleceniem zawartosc recordseta
| wrzucic do tabeli?

a pół polecenia nie starczy ??? mamo ...

Po to wymyślono SQL aby nie latać po tablicach !
A skoro w SQL-89/92 nie istnieje odpowiednik dla accessowego TRANSFORM, to
znaczy, że M$ miało powody czy pretekst by tej składni nie tolerować jako
podselect.

Nawet instrukcja "Select * Into NowaTabela ..." jest AFAIK wynalazkiem
czysto accessowym - typowym "pójściem na skróty" dla domorosłych
"bazodanowców" ...

Poza tym oprogramowanie przeniesienia dowolnego recordsetu do dowolnej
nowej tabeli to raptem dwie/trzy pętelki po rekordach i polach recordsetu
!

(krok pierwszy: przelotka po polach (pobieranie typów pól), aby utworzyć
tabelę
krok drugi: przelotka po rekordach + przelotka po polach (pobieranie
wartości pól), aby przenieść je do tabeli)

Ujęte w:
With Workspaces(0)
.BeginTrans
(...)
.CommitTrans
End With

będzie niemal tak samo efektywne, jak czysty sql !

***

A tak poza tym:
Da się to zrobić tzw, jedną linijką !
Wystarczy, że nie użyjesz kwerendy krzyżowej, lecz jej odpowiednika w
standardzie SQL-89:

string ssql:

Select
{pola grupujące}
, Sum(iif(polePivot='Ala',poleTransform,Null) as Ala
, Sum(iif(polePivot='Ola',poleTransform,Null) as Ola
, Sum(iif(polePivot='Jaś',poleTransform,Null) as [Jaś]
...
Into
NowaTabela
From
Tabela
Where
...
Group By
{pola grupujące}

i:

CurrentProject.Connection.Execute ssql

***

Jeśli nie znasz ilości wartości "pivot" musisz je sobie sam wcześniej
pobrać:

Select Nz(polePivot, "<>")
From Tabela
Group By polePivot

i stringa ssql budować w pętli:

(...)
With rsPivot
.MoveFirst
Do Until .Eof
ssql = ssql & vbCrLf & _
" , Sum(iif(polePivot='" & .Fields(0) & "'" & _
",poleTransform,Null) as [" & .Fields(0) & "]"
.MoveNext
Loop
End With

Prostsze niż ciupcianie !

--
KN

archiwum grupy:
http://groups.google.pl/advanced_group_search?&as_ugroup=pl*msaccess

Code_rEd

unread,
May 13, 2005, 1:15:46 PM5/13/05
to
Osoba podpisujaca sie jako Krzysztof Naworyta popelnila na
pl.comp.bazy-danych.msaccess co nastepuje:

> to go zaraz potem skasuj, mamo ...
pamietam ta serie, pamietam ;)

> funkcję GetUniqueName() napisz sobie sam !

i tak mi duzo pomogles, wiec zastosuje sie do sugestji? sugestii? do
wskazowki :)

> a pół polecenia nie starczy ??? mamo ...

toz to chyba juz zlosliwosc czy jak? ;)

> Nawet instrukcja "Select * Into NowaTabela ..." jest AFAIK wynalazkiem
> czysto accessowym - typowym "pójściem na skróty" dla domorosłych
> "bazodanowców" ...

wczesniej uzywalem mssql-ka i tam nie bylo krzyzowek i radzilem sobie za
pomoca dynamicznie skladanych esquelkow. teraz mam accessa i pomyslalem, we
skoro majkrosoft wymyslil transorm pivoty oraz selekty into, to pewnie
dopracowal pod tym katem tez swojego eskuelka - ale jak widac sie mylilem,
albo za malo czytalem. kajam sie.

> (krok pierwszy: przelotka po polach (pobieranie typów pól)

> krok drugi: przelotka po rekordach + przelotka po polach

wykorzystam.


> będzie niemal tak samo efektywne, jak czysty sql !

a tego to juz nie wiedzialem - jak moge w access-ie zmierzyc koszt
zapytania? :|

> Select
> {pola grupujące}
> , Sum(iif(polePivot='Ala',poleTransform,Null) as Ala
> , Sum(iif(polePivot='Ola',poleTransform,Null) as Ola
> , Sum(iif(polePivot='Jaś',poleTransform,Null) as [Jaś]
> ...
> Into
> NowaTabela
> From
> Tabela
> Where
> ...
> Group By
> {pola grupujące}

to mi przyszlo do glowy (nawyki z t-sql), ale wydawalo mi sie to malo
eleganckie

> Prostsze niż ciupcianie !
to zalezy na jakim sie jest poziomie w accesie. jak dla mnie, to prostsze do
tej pory bylo ciupcianie, ale po Twoich wskazowkach widze, ze moj problem
juz nie jest problemem.

Dziekuje Ci uprzejmie za podanie rozwiazania (imho) na tacy, prawde mowiac
spodziewalem sie serii odpowiedzi typu:
-> zajrzyj na www.ag.bocznica.org (wole wejscie bezposrednio) ;)
-> masz przeciez pier***** google (mam i nawet uzylem)
-> F1 (tu jest problem. jak uzywalem a97, to help byl ze tak powiem miodowy,
w wersjach od 2000 w gore nijak nie moge sie tam niczego doszukac -
szczegolnie jezeli chodzi o programowanie)
-> archiwum grupy obejrzyj (chyba zle szukalem albo zle kryteria podawalem,
bo kurde nie znalazlem)
-> Pozorkownia Ci pomoze (przejrzalem, nie znalazlem)
-> Strony Lebansa i innych MVP (fakt, pobieznie, bo tu byl wiekszy problem z
jezykiem)
-> wiecej grzechow nie pamietam :)
--
~> pozdrawiam serdecznie,
~> Code_rEd
~> gg#3006187

0 new messages