[VB] onafhankelijke Access Databasemodule

Pagina: 1
Acties:

  • robbertb
  • Registratie: September 2000
  • Niet online
Ik heb een programma in VB dat in verschillende tabellen gelijkwaardige bewerkingen moet doen. Alleen de tabelnamen,kolomnamen en soms aantal kolommen varieert. Nu wil ik graag een databasemodule maken waar al deze bewerkingen inzitten en zo flexibel is dat ik later niet de module hoef aan te passen. Ik ben hier al mee bezig geweest maar zover ik weet kan ik maar 2 oplossingen bedenke die beide niet echjt handig zijn:
-wanneer de dbmodule wordt aangesproken meegeven: bewerking,tabel,kolommen, per kolom de nieuwe waarde.
-voor elke tabel een functie maken.

Naja vooral bij het eerste komt nogal wat kijken, je moet zo veel argumenten meegeven, e ndaarnaast is het aatal variabelen varierent. kan iemand me opweg helpen?
En ja ik zit vast aan Access.. en wil volgens de N-tier structuur blijven werken. Dus het meesture van de complete SQL lijkt me ook niet zo heel zinnig, dan heeft de db module bijna niks meer te doen.
Probleem zit em ook dat de types die in de database moeten komen niet altijd hetzelfde zijn, kan een string,integer,datum etc zijn.

[ Voor 7% gewijzigd door robbertb op 11-04-2003 10:21 ]


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Wat je zou kunnen doen is gebruik maken van de tabledef binnen Access. Je kunt dan door alle kolommen heen loopen en voor elke kolom de waarde opgeven. Als je echter aangeeft dat je ook elke keer variabele waarden voor in de kolommen hebt denk ik dat het heel moeilijk wordt om daar een module voor te maken. Het enige wat dan telkens overeenstemt is het feit dat er in een tabel gewerkt moet worden...

En eigenlijk is die er binnen Access natuurlijk al: zoek eens op wat je met een update-query allemaal kunt doen!

My personal website


Verwijderd

Je kan ook nog een soort systeem tabel gebruiken en die vullen met de gewenste variabelen. Vervolgens laat je de module deze informatie gebruiken. De module is dan niet helemaal onafhankelijk, maar goed. Je zou zelfs nog deze oplossing kunnen combineren met de van OZ-Gump. Vul die tabel met de updatequeries en execute die dan.

  • robbertb
  • Registratie: September 2000
  • Niet online
Ik wil eigenlijk in een array de parameters meegeven. Maar een array public declareren in een klas werkt niet. Want ze moeten in andere dlls gebruikt kunnen worden.

Verwijderd

Je kan ook mooi met interfaces werken. Zelfs in VB :). Dan kan je voor elke tabel de interface hetzelfde houden, dus generiek, maar de implementatie mooi gescheiden houden. Zie het 'Implements' statement.
Je kan anders toch een class maken die alle properties heeft die je nodig hebt, en deze meegeven?

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 14-08 12:38

Crazy D

I think we should take a look.

robbertb schreef op 14 April 2003 @ 09:18:
Maar een array public declareren in een klas werkt niet. Want ze moeten in andere dlls gebruikt kunnen worden.
Dan maak je daar functies voor om items toe te voegen en te verwijderen?

Exact expert nodig?


  • robbertb
  • Registratie: September 2000
  • Niet online
Crazy D schreef op 14 April 2003 @ 09:42:
[...]

Dan maak je daar functies voor om items toe te voegen en te verwijderen?
Ja ik heb functies om items toe te voegen, verwijdere etc. maar aantal kolommen e ntypes is wisselent dus zou een array handig zijn. maar ben daar al uit. Door gewoon een Variant public te definieren en de variant gelijk te zetten met de array. Dus:

public myVariant as variant
private myArray(10)

myarray(1)="piet"
myarray(2)=5

en dan vervolgens
myVariant = myArray

Maar nu zit ik nog met het probleem dat de andere module niet weet hoe groot de array is, hoeveel er dus gevult zijn

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 14-08 12:38

Crazy D

I think we should take a look.

In VBA kun je toch ook een array redimmen?
code:
1
2
3
Dim arr() as String

Redim Preserve arr(10)

?
Dan hoef je geen aparte variant voor bij te houden.
En het aantal items in de array kun je natuurlijk ook een functie/property van maken in je class :)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Private arr() as string
Private Sub Class_Initialize()
    Redim arr(0)
End Sub

Public Property Get AantalItems() as Long
    AantalItems = Ubound(arr)
End Property

Public Sub addItem(s As String)
    Redim Preserve arr(Ubound(arr) + 1)
    arr(ubound(arr)) = s
End Sub

Voor het gemak tel ik in de array vanaf item 1, ik init 'm op 0 zodat de addItem zonder problemen werkt :)

Exact expert nodig?

Pagina: 1