|
| Automatisere kode Fra : Morten Snedker |
Dato : 15-04-02 16:44 |
|
Jeg har følgende kode:
Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Set con = New ADODB.Connection
con.Open strConnect
, som jeg benytter mange forskellige steder, hver gang jeg skal tilgå
en tabel. Kan det gøres på én linie - i ét kald, i stedet for jeg skal
skrive alle linierne hver gang?
mvh
Morten Snedker
| |
Carsten Jessen (15-04-2002)
| Kommentar Fra : Carsten Jessen |
Dato : 15-04-02 17:46 |
|
Hej Morten
Indsæt koden i en sub i et modul
MVH Carsten
"Morten Snedker" <morten.nospam@dbconsult.dk> wrote in message
news:p5tlbusvl6sapjc2g72q4blpcfn7hpkjkl@4ax.com...
> Jeg har følgende kode:
>
> Dim con As ADODB.Connection
> Dim rs As ADODB.Recordset
>
> Set rs = New ADODB.Recordset
> Set con = New ADODB.Connection
>
> con.Open strConnect
>
> , som jeg benytter mange forskellige steder, hver gang jeg skal tilgå
> en tabel. Kan det gøres på én linie - i ét kald, i stedet for jeg skal
> skrive alle linierne hver gang?
>
> mvh
> Morten Snedker
>
| |
Rayman (15-04-2002)
| Kommentar Fra : Rayman |
Dato : 15-04-02 20:37 |
|
Prøv i stedet at lægge koden i et modul:
<Snip>
Option Explicit
Dim m_con As ADODB.Connection
Dim m_strConnect As String
Public Property Let ConnectionString(vData as String)
m_strConnect = vData
End Property
Public Property Get con() as ADODB.Conenction
If m_Con is nothing then
Set m_Con = new ADODB.Connection
m_Con.ConnectionString = m_strConnect
m_Con.Open
End if
Set con = m_Con
End Property
Public Sub CloseCon()
m_Con.Close
Set m_con = Nothing
End sub
Public Function ExecuteSql(strSql as String) as ADODB.Recordset
'Creates a new rs automaticly, no need to use new
Set ExecuteSql = Me.Con.Execute(strSql)
Me.CloseCon
End Function
</Snip>
Du skal arbejde lidt på at tilpasse den til dine krav.
Mvh. Rayman
"Carsten Jessen" <c.je@get2net.dkREMOVETHIS> wrote in message
news:bsDu8.4017$731.194515064@news.orangenet.dk...
> Hej Morten
> Indsæt koden i en sub i et modul
>
> MVH Carsten
>
> "Morten Snedker" <morten.nospam@dbconsult.dk> wrote in message
> news:p5tlbusvl6sapjc2g72q4blpcfn7hpkjkl@4ax.com...
> > Jeg har følgende kode:
> >
> >
> > , som jeg benytter mange forskellige steder, hver gang jeg skal tilgå
> > en tabel. Kan det gøres på én linie - i ét kald, i stedet for jeg skal
> > skrive alle linierne hver gang?
> >
> > mvh
> > Morten Snedker
> >
>
>
| |
Morten Snedker (15-04-2002)
| Kommentar Fra : Morten Snedker |
Dato : 15-04-02 20:48 |
|
On Mon, 15 Apr 2002 18:45:51 +0200, "Carsten Jessen"
<c.je@get2net.dkREMOVETHIS> wrote:
>Hej Morten
>Indsæt koden i en sub i et modul
Troede jeg ikke man kunne...altså kaldes fra en anden procedure end
den det skal bruges i. Men ved eftertanke - hvorfor ikke. Såre
simpelt. Tak.
/Snedker
| |
Morten Snedker (15-04-2002)
| Kommentar Fra : Morten Snedker |
Dato : 15-04-02 21:29 |
|
On Mon, 15 Apr 2002 18:45:51 +0200, "Carsten Jessen"
<c.je@get2net.dkREMOVETHIS> wrote:
>Hej Morten
>Indsæt koden i en sub i et modul
Okay - virker næsten nu. Jeg har følgende to procedurer:
myConnect's første parameter angiver om recordset skal dimensioneres
etc. Næste parameter, vil i tilfælde af True, være en SQL-streng.
Denne virker fint. Men i Sub Test() går det galt. Ved kompilering
stopper den ved rs.MoveFirst: Variable not defined
Hvad er galt? Må dimensionering af recordset ikke stå i en seperat
procedure ?
/Snedker
'---kode start---
Public Sub myConnect(SetRs As Boolean, Optional pubSQL As String)
Dim con As ADODB.Connection
Set con = New ADODB.Connection
con.Open strConnect
If SetRs = True Then
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
With rs
.CursorLocation = adUseClient
.CursorType = adOpenDynamic
.LockType = adLockOptimistic
If pubSQL <> "" Then
.Open pubSQL, con
End If
End With
End If
End Sub
Sub test()
Call myConnect(True, "Select * From Kunde")
rs.MoveFirst
End Sub
'---kode slut---
| |
Tomas Christiansen (15-04-2002)
| Kommentar Fra : Tomas Christiansen |
Dato : 15-04-02 23:00 |
|
Morten Snedker skrev:
> Denne virker fint. Men i Sub Test() går det galt. Ved kompilering
> stopper den ved rs.MoveFirst: Variable not defined
Jamen, hvordan skulle proceduren "test" dog kunne vide at du i
proceduren "myConnect" har erklæret en variabel ved navn "rs"?
Du ville nok være smart at returnere dit recordset fra "myConnect",
f.eks. således:
Public Function myConnect(SetRs As Boolean, Optional pubSQL As
String) As ADODB.Recordset
...
Set myConnect = rs
End Sub
Du kan da kalde funktionen "myConnect" på denne måde:
Sub test()
Dim rs As ADODB.Recordset
Set rs = myConnect(True, "Select * From Kunde")
rs.MoveFirst
End Sub
-------
Tomas
| |
Rayman (16-04-2002)
| Kommentar Fra : Rayman |
Dato : 16-04-02 07:16 |
|
Eller er det en modul variabel? Du kan godt gøre som du selv har vist, men
som Tomas skriver, er det bedste at du lader den returnere resultatet. Med
hensyn til din Optional parameter, bør du altid give den en default værdi,
da vb i nogle tilfælde ikke behandler en optional som man kunne forestille
sig.
Mvh Rayman.
"Tomas Christiansen" <toc@blikroer.removethis.dk> wrote in message
news:a9ff06$r4a$1@news.cybercity.dk...
> Morten Snedker skrev:
> > Denne virker fint. Men i Sub Test() går det galt. Ved kompilering
> > stopper den ved rs.MoveFirst: Variable not defined
>
> Jamen, hvordan skulle proceduren "test" dog kunne vide at du i
> proceduren "myConnect" har erklæret en variabel ved navn "rs"?
>
> Du ville nok være smart at returnere dit recordset fra "myConnect",
> f.eks. således:
>
> Public Function myConnect(SetRs As Boolean, Optional pubSQL As
> String) As ADODB.Recordset
> ...
> Set myConnect = rs
> End Sub
>
> Du kan da kalde funktionen "myConnect" på denne måde:
>
> Sub test()
> Dim rs As ADODB.Recordset
> Set rs = myConnect(True, "Select * From Kunde")
> rs.MoveFirst
> End Sub
>
> -------
> Tomas
>
| |
Tomas Christiansen (16-04-2002)
| Kommentar Fra : Tomas Christiansen |
Dato : 16-04-02 22:50 |
|
Rayman skrev:
> Eller er det en modul variabel?
Hvad mener du? Hvis du kigger Mortens kode igennem vil du opdage at
"rs" er erklæret midt inde i proceduren "myConnect".
> ... Med hensyn til din Optional parameter, bør du altid give den en
default
> værdi, da vb i nogle tilfælde ikke behandler en optional som man
kunne
> forestille sig.
Kan du give et eksempel?
Vil en optional string ikke altid initialiseres til den tomme streng,
hvis den ikke angives på kald-tidspunktet?
-------
Tomas
| |
Rayman (17-04-2002)
| Kommentar Fra : Rayman |
Dato : 17-04-02 19:33 |
|
Jo, en streng vil, en variant vil være missing. Men jeg har hørt at vb har
noget overhead, da den ikke bare erstatter parameteren med en tom streng.
Derudover giver det også en lettere forståelig kode.
Min fejl, det med Modul Var, jeg er bare vant til at alle dim's kommer i
starten af funktionen.
Mvh. Rayman.
"Tomas Christiansen" <toc@blikroer.removethis.dk> wrote in message
news:a9i2qa$uuk$1@news.cybercity.dk...
> Rayman skrev:
> > Eller er det en modul variabel?
>
> Hvad mener du? Hvis du kigger Mortens kode igennem vil du opdage at
> "rs" er erklæret midt inde i proceduren "myConnect".
>
> > ... Med hensyn til din Optional parameter, bør du altid give den en
> default
> > værdi, da vb i nogle tilfælde ikke behandler en optional som man
> kunne
> > forestille sig.
>
> Kan du give et eksempel?
> Vil en optional string ikke altid initialiseres til den tomme streng,
> hvis den ikke angives på kald-tidspunktet?
>
> -------
> Tomas
>
| |
Morten Snedker (16-04-2002)
| Kommentar Fra : Morten Snedker |
Dato : 16-04-02 10:54 |
|
On Mon, 15 Apr 2002 23:00:04 +0100, "Tomas Christiansen"
<toc@blikroer.removethis.dk> wrote:
>Du kan da kalde funktionen "myConnect" på denne måde:
>
> Sub test()
> Dim rs As ADODB.Recordset
> Set rs = myConnect(True, "Select * From Kunde")
> rs.MoveFirst
> End Sub
Hvordan lukker jeg connection efter endt brug (con.Close). Eller er
det lige meget??
mvh
Morten Snedker
| |
Carsten Schack-eriks~ (16-04-2002)
| Kommentar Fra : Carsten Schack-eriks~ |
Dato : 16-04-02 22:18 |
|
Eller hvad med denne her:
Dim r As New ADODB.Recordset
r.Open "select * from Kunder", "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\Data\Udvikling\b2b\b2b.mdb;Persist Security Info=False",
adOpenForwardOnly
Hvis det er et VB program laver jeg typisk et global connection object,
som jeg initialiserer i starten, og først lukker når prgogrammet lukker.
For web løsninger åbner oglukker jeg pr. asp side.
Men men, hvad gør i i praksis ?
Mvh
Carsten
--
Posted via Mailgate.ORG Server - http://www.Mailgate.ORG
| |
Rayman (17-04-2002)
| Kommentar Fra : Rayman |
Dato : 17-04-02 19:41 |
|
Jeg har et DLL interface, der deler en enkelt connection med alle
funktioner. I denne DLL er alle tabeller declared som klasser. Og det kan
varmt anbefales, da der ikke længere skal rodes med SQL statements og
recordsets, men alle værdier er typebestemte og validerede på forhånd
(rs.fields("name").value vs. oCustomer.Name, giver mange færre
fejlmuligheder (ingen null, ingen missing field....)) Jeg lukker altid mine
connections efter brug, fordi jeg engang hørte at man godt kan få lidt bøvl
med noget cache ting. Det er ret langsomt at åbne og lukke, så jeg har 5 sek
delay på.
Med hensyn til ASP, så tror jeg at det er den eneste måde at gøre det på,
altså åbne og lukke efter hver side.
Mvh. Rayman.
"Carsten Schack-eriksen" <carsten@schack-eriksen.dk> wrote in message
news:4b19dec5a44bde24b095a21924929198.54588@mygate.mailgate.org...
>
> Eller hvad med denne her:
>
> Dim r As New ADODB.Recordset
> r.Open "select * from Kunder", "Provider=Microsoft.Jet.OLEDB.4.0;Data
> Source=C:\Data\Udvikling\b2b\b2b.mdb;Persist Security Info=False",
> adOpenForwardOnly
>
> Hvis det er et VB program laver jeg typisk et global connection object,
> som jeg initialiserer i starten, og først lukker når prgogrammet lukker.
>
> For web løsninger åbner oglukker jeg pr. asp side.
>
> Men men, hvad gør i i praksis ?
>
> Mvh
> Carsten
>
>
> --
> Posted via Mailgate.ORG Server - http://www.Mailgate.ORG
| |
|
|