Jag kör på ett liknande sätt, och jag kör getRows() så fort jag bara kan, och sedan hanterar jag mina tvådimensionella arrays i resten av applikationen. Då kan jag stänga alla objekt efter mig snabbt.
Mvh,
10 svar · 284 visningar · startad av Vide
Hejsan,
Håller på att bygga lite komponenter till ett community (web), och har lite frågor ang. hur jag bäst arrangerar funktioner och dess anrop...
Jag har en class där jag samlar alla databas-funktioner, dessa funktioner skall sedan anropas ifrån andra classer i samma modul. Men, jag vill ju bygga det så effektivt som möjligt, jag har t.ex en funktion som öppnar databasen utifrån en property... i samma class har jag också funktioner för att hämta recordset som jag sedan återger till websidan... "Problemet" är att jag vill att min connection till databasen inte skall vara öppen längre än nödvändigt, samt att flera olika funktioner skall använda objektet...
Lite konstigt skrivet kanske, men alla ideér mottages tacksamt... :)
Mvh, Vide
Jag kör på ett liknande sätt, och jag kör getRows() så fort jag bara kan, och sedan hanterar jag mina tvådimensionella arrays i resten av applikationen. Då kan jag stänga alla objekt efter mig snabbt.
Mvh,
Connection objektet stänger du ju så fort du använt det för att hämta ett recordset. Konstigare än så är det väl inte?
Menar du att du skulle vilja ha en generell öppning så man bara öppnar en gång och sen låter det vara öppet under körning så man kan använda det flera gånger. Dum idé tycker jag i så fall.
Sen så är det ju vettigt att använda frånkopplade recordsets. Så rs.Open sSQL, objConn, adOpenStatic, adLockReadOnly tillsammans med rs.ActiveConnection = Nothing är ju ganska bra... :)
Problemet med getRows är att du tappar de metoder som ett recordset har, självklart kan jag lägga till ett alternativ som säger att jag vill ha ett serverside recordset, disconnected recordset, getRows eller getString... det är nog en bra idé... Väljer man ett serverside så skall den inte stänga connection-objektet...
I en annan class (user class) har jag en funktion för att hämta ett specifikt fält, hamnar jag i loop där jag anropar funktionen så är det ju puckat att öppna och stänga connection varje gång...
... fortsättning följer... ;)
Mvh, Vide
Varför skulle man vilja använda serverside-recordset? :q
För att hämta ett specifikt fält så kan man ju skriva typ: variabel = GetRecordset("SELECT * FROM tabell")("fältet")
Sen så hoppas jag att du lägger dessa trevliga funktioner i Moduler som kan användas överallt i COM-objektet och inte klasser som du anropar publikt! :)
Erik Juhlin skrev:
Varför skulle man vilja använda serverside-recordset? :q
När man inte har behov av att t.ex stega fritt i recordsettet utan bara skall göra en linjär loopning av posterna är det bättre att inte hämta ett clientside recordset då det skickas med onödigt mycket med objektet...
Jag tycker att det är bättre att bygga in det när man ändå skall bygga en databas-klass, det är ju inte mycket extra kod...
Erik Juhlin skrev:
För att hämta ett specifikt fält så kan man ju skriva typ: variabel = GetRecordset("SELECT * FROM tabell")("fältet")
Mjo, med ett recordset så.. men nu pratade jag om en tvådimensionel array... ;)
Erik Juhlin skrev:
Sen så hoppas jag att du lägger dessa trevliga funktioner i Moduler som kan användas överallt i COM-objektet och inte klasser som du anropar publikt!
Har inte funderat på arkitekturen på det sättet ännu, det är det jag håller på med nu... ;)
*Funderar*
Eftersom jag inte kommer att bygga klasser för andra funktioner (userclass, forumclass osv) så kommer jag aldrig att behöva komma åt databasen publikt, så visst det är nog en smart idé att lägga det i moduler...
Men vad tjänar man på det? Förutom att man begränsar användandet till själva modulen?
Du tjänar på det genom att du då aldrig får för dig att skriva SQL-frågor i presentationslagret. Snyggare struktur.
Och så har du metoderna lätttillgängliga i alla dina klasser. :)
Hur gör man det i VB6? När man lägger till en egen modul, är det något speciellt man måste göra för att få funktionerna tillgängliga för klasserna?
Mvh, Vide
Nej, du lägger bara upp en vanlig modul och inte en class modul. :)