/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
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



Søg
Reklame
Statistik
Spørgsmål : 177557
Tips : 31968
Nyheder : 719565
Indlæg : 6408885
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste