[ manda @ 25.08.2004. 10:07 ] @
Imam jedan problem. Naime, dešava se da MSSQL temporary tabela koju kreiram pod jednom ADODB.Connection, a kasnije probam da joj pristupim iz iste konekcije više ne postoji. Radim u Visual Basic-u 6, mada verujem da problem nema veze VB-om nego sa ADOm.

connMSSQL.Open "Provider=sqloledb;Password=pass1;User ID=user1;" & _
"Data Source=server1; Initial Catalog=baza1;" & _
"Persist Security Info=True"

connMSSQL.Execute "CREATE TABLE #temp1 (jmbg varchar(15), status int)"
connMSSQL.Execute "insert into #temp1 values ('123134252',3)"

U trecoj liniji greska - ne postoji tabela #temp1 - zašto ?
[ akrosoft @ 25.08.2004. 11:33 ] @
Koliko znam, temporary tabele se kreiraju u bazi tempdb, a tebi je konekcija na bazu baza1 tako da je sa tim connection stringom i ne mozes videti. Drugo, i dalje nisi siguran da li ce ta tabela biti u tempdb i koliko dugo, jer prilikom refreshovanja tempdb baze #temp tabele na koje ne postoji referenca se ubijaju. Temporary tabele se koriste uglavnom u okviru stored procedura da bi garantovao lifetime #temp tabele. Znaci, ako hoces da ti ovaj kod koji si napisao sigurno radi, uradi ovako:
Code:

connMSSQL.Open "Provider=sqloledb;Password=pass1;User ID=user1;" & _
"Data Source=server1; Initial Catalog=baza1;" & _
"Persist Security Info=True"
connMSSQL.Execute "SP_Neka";

a u okviru SP_Neka izmedju ostalog, definisi i puni #temp tabelu:
Code:

....
CREATE TABLE #temp1 (jmbg varchar(15), status int)
insert into #temp1 values ('123134252',3)
....

[ manda @ 25.08.2004. 11:56 ] @
Jasno mi je to sto si napisao kao resenje, ali meni upravo treba takav pristup temp tabeli (iz koda da nekoliko puta pristupam istoj tabeli). Sem toga temp tabele se mozda i cuvaju u okviru tempdb, ali koliko ja znam default baza ne mora da bude tempdb da bi temp tabeli moglo da se pristupi - to mozes da proveris u Query Analizeru.
[ akrosoft @ 25.08.2004. 13:12 ] @
Citat:
manda: Sem toga temp tabele se mozda i cuvaju u okviru tempdb, ali koliko ja znam default baza ne mora da bude tempdb da bi temp tabeli moglo da se pristupi - to mozes da proveris u Query Analizeru.

Naravno, ja sam ti rekao po default setovanjima za MSSQL gde se cuvaju temporary tabele, verovatno moze i da se promeni. Iz QA ti se vidi temporary tabela jer je u scopu, kao sto se vidi i okviru stored procedure. Tebi tabela #temp izlazi iz scope-a cim SP (ili QU) izvrsi exekuciju. Evo ti mali experiment, deklarisi bilo koju varijablu:
DECLARE varNeka INT
SET varNeka =10
pa brobaj da izvuces rezultat:
SELECT varNeka
Ovo ce ti raditi u okviru QA i u okviru SP. Ako ovo pokusas sa
connMSSQL.Execute "DECLARE varNeka INT";
connMSSQL.Execute "SET varNeka =10";
...u drugom redu ce te pitati sta ti je varNeka, tako isto i za #temp tabelu. Zasto moras da koristis #temp tabela, ako mozes malo detaljnije da objasnis....mozda ima neko drugo resenje.
[ degojs @ 25.08.2004. 13:33 ] @
Da li bi pomoglo da staviš sve u zajedno, pri čemo koristiš ; između izraza, ako ti već rešenje koje je akrosoft predložio ne odgovara?

connMSSQL.Execute "CREATE TABLE #temp1 (jmbg varchar(15), status int);insert into #temp1 values ('123134252',3)"

[ manda @ 25.08.2004. 13:39 ] @
Vidi: Imam 2 baze: MSSQL i Oracle. Upit iz jedne MSSQL tabele kaze koji ce redovi da se azuriraju u drugoj ORACLE tabeli. Pri tom - ako je unos u Oracle tabelu uspešan, STATUS u fetchovanom redu u MSSQL tabeli se menja iz 0 u 1. Ako menjam direktno MSSQL tabelu, koja je otvorenom upitu, desavaju se cudne stvari. Tako sam dosao na ideju da u temp tabelu ubacujem ID-jeve onih redova iz MSSQL tabele koje treba updatovati, pa nakon završetka obrade, da updatujem celu tabelu u skladu sa temp tabelom.

Pretpostavljam da to moze direktno, updatovanjem nad bazom, ali kad ja to probam, desavaju mi se neki exceptions. Probao sam u okviru iste ili druge konekcije, ali oba slucaja, desavaju se exceptioni, doduse razliciti.
[ degojs @ 25.08.2004. 14:03 ] @
Hm, u .NET radi bez problema. Sve dok je konekcija otvorena nema problema da se pristupa privremenoj tabeli.

Da li bi pomoglo da pre sledećeg insert-a eksplicitno odrediš bazu?

use tempdb;insert into #temp1 values...

itd?

[ manda @ 25.08.2004. 14:09 ] @
Čini mi se da sam već naglasio da mi trebaju odvojeno - kao 2 upita
[ degojs @ 25.08.2004. 21:47 ] @
Taj kod što si ti dao u prvoj poruci kod mene radi OK. Provereno.
[ GoranVucicevic @ 26.08.2004. 21:31 ] @
Verovatno ti neka od DB option nije dobro podesena.