VB6 wieder installiert - Probleme

Liebe VB-Gemeinde,

bis Ende der Neunziger habe ich etwas intensiver mit VB6 programmiert. Aus dieser Zeit habe ich noch die (lizensierte) VB 6.0 Enterprise-Version. Für meine Zwecke völlig überdimensioniert, aber ich habe das Paket von einem Freund extrem günstig bekommen.
Da ich mich jetzt endlich wieder mit VB beschäftigen kann und möchte, habe ich also das alte VB zusammen mit meinen damals erstellten Programmen installiert.

Und nun habe ich Probleme mit all den Programmen, in denen ich Datenbankzugriffe habe.

Damals arbeitete ich mit WIN NT und Access-Datenbanken unter Office 96 oder 97, heute habe ich WIN2000 und Office 2000. Die DB’s öffnen sich problemlos in Access; irgendwann erfolgte da mal eine Konvertierung.
VB aber sagt mir jetzt beim Versuch, eine solche DB zu öffnen: „Unrecognized database format: ‚Lw:\database\my_DB.mdb‘.“ Was ich insofern verstehe, da offensichtlich das „alte“ VB nicht mit der „neuen“ DB kann.
Auf einer alten Sicherungs-CD fand ich noch die „alte“, nicht konvertierte DB - und die wurde auch problemlos verarbeitet.

Nun würde ich aber nur ungerne wieder Office96 installieren (irgendwo müsste das noch rumliegen); es rentiert sich für mich aber auch nicht, auf .net umzusteigen.
Welche Möglichkeiten gibt es dann für mich, die aktuellen Access-Datenbanken einzubinden?

Ein weiteres Problem:

Eine weitere Fehlermeldung sagt: „Cannot load control grdDataGrid; license not found.“ Es handelt sich hier um DBGRID32.ocx. Ich konnte mich daran erinnern, dass bei dem Paket zwar eine Menge Controls dabei waren, diese z.T. aber erst irgendwie lizensiert (in Registry eingetragen) werden mussten.
Das machte ich mit Regocx32.exe bzw. Regit.exe. Hat in dem Fall aber nichts gebracht. Das Control ist dann zwar registriert, lässt sich aber dennoch nicht verwenden (->license not found). Hätte hier jemand eine Idee?

Danke für euere Unterstützung!

Robi

Hi Robi,

schön, daß Du VB6 wieder auspackst, dann kannst Du uns ja hier unterstützen! :smile:

Deine alten Programme arbeiten alle noch mit DAO, damit kannst Du leicht auf eine Access7 Datenbank zugreifen, an Datenbanken von Access 2000 und spätere kommst Du damit nicht.

Jetzt hast Du mehrere Möglichkeiten.

1.) VB6 hat unter Add-Ins den ‚Visual Datamanager‘, damit kannst Du Problemlos wie mit Access Datenbanken erstellen und mit DAO darauf zugreifen.

2.) Du verwendest das Steuerelement ADODC von VB6, damit kannst Du auf jede Datenbank zugreifen, zu der Du einen ODBC-Treiber hast, also nicht nur jede Access Datenbank, sondern bei vorhandenen Treibern auch Oracle, SAPDB …

3.) Du baust Dir Deine Datenbank mit Access 2000 und stellst die Verbindung per Code her. Das ist die beste Lösung, weil Du mit den SQL-Abfragen arbeiten kannst und Deine Programme viel besser und schneller werden, als die Alten.

Ich bin auch gerade dabei, ein paar Kleinigkeiten von DAO nach ADO umzustellen und muss öfter nachsehen, wie das doch alles ging … Ein Beispielprogramm mit einer Datenbank von mir:

Dim strSQL As String
Dim objRS As ADODB.Recordset
Dim objConnection As ADODB.Connection

Private Sub Command1\_Click()
 Me.Print suche("12345", "123")
End Sub

Private Function suche(ByVal EDVNr As String, ByVal cha As String) As Boolean
 Dim DB As String
 DB = "C:\Datenbank.mdb"
 strSQL = "SELECT \* " & \_
 "FROM Chargen " & \_
 "WHERE (EDVNummer = '" & EDVNr & "') And (Chargennummer = '" & cha & "');"
 Set objConnection = New ADODB.Connection

 With objConnection
 .CursorLocation = adUseClient
 .Mode = adModeShareDenyNone
 .Provider = "Microsoft.Jet.OLEDB.4.0"
 .ConnectionString = DB
 .Open
 End With

 Set objRS = New ADODB.Recordset
 With objRS
 Set .ActiveConnection = objConnection
 .CursorLocation = adUseClient
 .CursorType = adOpenStatic
 .LockType = adLockOptimistic
 .Source = strSQL
 Call .Open
 End With

 If objRS.RecordCount = 0 Then
 suche = False
 Else
 suche = True
 End If
 objRS.Close
End Function

Daß Du Probleme mit der Verwendung des Datagrid hast ist eher ein Glücksfall, das Ding ist so verbugt, daß Du daran ohnehin keinen Spaß hättest. Schreib Dir das lieber selbst.

VB.NET benötigst Du dafür jedenfalls nicht, ich wüsste nicht, was man mit VB.NET programmieren kann, was man mit VB6 nicht auch schafft.

Gruß, Rainer

Hallo Robi,

nen bissl mager sind deine Angaben schon und von daher koennen wir nur raten :s
Wie greifst du denn auf die DB zu ? Via ADO oder DAO ?
Wie schaut denn die Routine aus, mit der du die DB öffnest?
Welche Verweise sind alle gesetzt?

Normalerweise kannst du beim erstellen der DB Die Jet Engine angeben. Dies bedeutet mit welcher Access Version die DB kompatibel ist.
Ich habe mal schnell etwas getippselt und verschiedene DB erstellt in verschiedenen Jet Versionen. Beim öffnen gab es jedoch keinerlei Probleme!

Damals arbeitete ich mit WIN NT und Access-Datenbanken unter
Office 96 oder 97, heute habe ich WIN2000 und Office 2000. Die
DB’s öffnen sich problemlos in Access; irgendwann erfolgte da
mal eine Konvertierung.
VB aber sagt mir jetzt beim Versuch, eine solche DB zu öffnen:
„Unrecognized database format: ‚Lw:\database\my_DB.mdb‘.“ Was
ich insofern verstehe, da offensichtlich das „alte“ VB nicht
mit der „neuen“ DB kann.

VB kann sehr gut mit DB aus neuen Office Versionen umgehen :wink:

Auf einer alten Sicherungs-CD fand ich noch die „alte“, nicht
konvertierte DB - und die wurde auch problemlos verarbeitet.

Hmm, wie schaut denn der Source aus mit dem du die DB erstellst und öffnest ?

Nun würde ich aber nur ungerne wieder Office96 installieren
(irgendwo müsste das noch rumliegen); es rentiert sich für
mich aber auch nicht, auf .net umzusteigen.

Wieso willst du Office 96 nochmal installieren?
Du hast noch die Alte DD und zur Not tippel schnell nen paar Zeilen, was dir die alte DB in das Format für Office 2000 wandelt ( Jet Engine = 5)

Welche Möglichkeiten gibt es dann für mich, die aktuellen
Access-Datenbanken einzubinden?

Siehe oben :smile:

Ein weiteres Problem:

Eine weitere Fehlermeldung sagt: „Cannot load control
grdDataGrid; license not found.“ Es handelt sich hier um
DBGRID32.ocx. Ich konnte mich daran erinnern, dass bei dem
Paket zwar eine Menge Controls dabei waren, diese z.T. aber
erst irgendwie lizensiert (in Registry eingetragen) werden
mussten.
Das machte ich mit Regocx32.exe bzw. Regit.exe. Hat in dem
Fall aber nichts gebracht. Das Control ist dann zwar
registriert, lässt sich aber dennoch nicht verwenden
(->license not found). Hätte hier jemand eine Idee?

Auch da haben wir eine Lösung. Das ist ein alt bekanntes problem und Hilfe findest du hier :smile:

http://vb-tec.de/lizenz.htm

Danke für euere Unterstützung!

Robi

MfG Alex

Hallo Rainer,

ich mag ja nicht schimpfen :s
Aber warum so unflexibel?

'Alles im Modul
Option Explicit

Public Enum Jet\_EngineV
 [JET10 = 1] = 1
 [JET11= 2] = 2
 [JET20 = 3] = 3
 [JET3X = 4] = 4
 [JET4X = 5] = 5
End Enum

Public Con As New ADODB.Connection 'Connection
Public CatADO As New ADOX.Catalog 'ADOX Catalog

Public Function FileExists(Path As String) As Boolean
On Error Resume Next
 Const NotFile = vbDirectory Or vbVolume
 FileExists = (GetAttr(Path) And NotFile) = 0
On Error GoTo 0
End Function

'Datenbank erstellen (Ohne Tabellen und Felder)
Private Function CreateDatabase(sFile As String, Optional JetVersion As Jet\_EngineV = [JET4X = 5], Optional PWD As String = "") As Boolean
On Error GoTo ErrHandler
If Con.State = adStateOpen Then Con.Close
If FileExists(sFile) Then Kill (sFile)
Con = "Provider=Microsoft.Jet.OLEDB.4.0;"
Con = Con & "Data Source=" & sFile & ";"
Con = Con & "Jet OLEDB:Engine Type=" & JetVersion & ";"
If PWD "" Then Con = Con & "Jet OLEDB:smiley:atabase Password=" & PWD & ";"
CatADO.Create Con
CreateDatabase = True
Exit Function
ErrHandler:
 Call fAdoErr("fCreateDB")
End Function

'Datenbank Öffnen
Public Function OpenDatabase(sFile As String, Optional PWD As String = "") As Boolean
On Error GoTo ErrHandler
Dim AdoErr As ADODB.Error
If Con.State = adStateOpen Then Exit Function
If Not (FileExists(sFile)) Then Exit Function
With Con
 .CursorLocation = adUseClient
 .Mode = adModeShareDenyNone 'adModeReadWrite
 .Provider = "Microsoft.Jet.OLEDB.4.0"
 .Properties("Data Source") = sFile
 If Len(PWD) 0 Then .Properties("Jet OLEDB:smiley:atabase Password") = PWD
 .Open
 OpenDatabase = CBool(Con.State = adStateOpen)
End With
Exit Function
ErrHandler:
 Call fAdoErr("fConnectDB")
End Function

Public Function OpenRecordsets() As Boolean
Dim SQL As String
 SQL = "Dein Statement": If Not (RunSql(SQL, DeinRecordset)) Then Exit Function
 OpenRecordsets = True
End Function

'Fehlerbehandlung
Private Sub fAdoErr(actSub As String) 'Fehlerbehandlung
Dim ErrNo() As Long
Dim ErrADO As ADODB.Error
Dim I As Integer
Dim strMsg As String
Dim bOnlyADO As Boolean
If Con.Errors.Count 0 Then
 ReDim ErrNo(Con.Errors.Count - 1)
 For Each ErrADO In Con.Errors
 strMsg = strMsg & "ADO-Error: " & ErrADO.Number & vbCrLf & "SQL-Error: " & ErrADO.SQLState & vbCrLf & ErrADO.Description
 ErrNo(I) = ErrADO.Number
 If Err.Number = ErrADO.Number Then bOnlyADO = True
 Next ErrADO
End If
If Not bOnlyADO Then
 strMsg = strMsg & vbCrLf & vbCrLf & "Fehler : " & Err.Number & vbCrLf & Err.Description
End If
MsgBox strMsg, vbExclamation, actSub
Con.Errors.Clear
Err.Clear
End Sub

'Recordset & Connection schliessen
Public Function CloseDB() As Boolean
On Error GoTo ErrHandler
If RecordsetName.State = adStateOpen Then Recordsetname.Close
If Con.State = adStateOpen Then Con.Close
Set Recordsetname = Nothing
CloseDB = True
Exit Function
ErrHandler:
 Call fAdoErr("fCloseConRs")
End Function

'Tabelle anlegen
Private Function CreateTable(sName As String) As Boolean
Dim TblADO As New ADOX.Table
On Error GoTo ErrHandler
CatADO.ActiveConnection = Con
TblADO.Name = sName
CatADO.Tables.Append TblADO
ExitErr:
Set CatADO = Nothing
CreateTable = True
Exit Function
ErrHandler:
 Call fAdoErr("fCreateTableADOX")
End Function

'Feld anlegen
Private Function CreateField(TableName As String, ColumnName As String, ColumnType As ADODB.DataTypeEnum, Optional ColSize As Integer = 255, Optional AutoIncrement As Boolean = False, Optional Default As Variant = Empty, Optional AllowZeroLength As Boolean = True) As Boolean
On Error GoTo ErrHandler
Dim ColADO As New ADOX.Column
CatADO.ActiveConnection = Con
With ColADO
 Set .ParentCatalog = CatADO
 .Name = ColumnName
 .Type = ColumnType
 If .Type = adVarWChar Then .DefinedSize = ColSize
 If .Type = adInteger Then
 If AutoIncrement Then .Properties("AutoIncrement") = True
 End If
 If Not IsMissing(Default) Then .Properties("Default") = Default
 If AllowZeroLength Then .Properties("Jet OLEDB:Allow Zero Length") = True
End With
CatADO.Tables(TableName).Columns.Append ColADO
Set CatADO = Nothing
CreateField = True
Exit Function
ErrHandler:
 Call fAdoErr("fCrateField")
End Function

'SQL Abfrage
Public Function RunSql(Statement As String, Rs As ADODB.Recordset) As Boolean
On Error GoTo ErrHandler
 If Rs.State = adStateOpen Then Rs.Close
 Rs.Open Statement, Con, adOpenDynamic, adLockPessimistic
 RunSql = True
 Exit Function
ErrHandler:
 Call fAdoErr("fRunSql")
End Function

'Datenbank erstellen
Public Function CreateDB(sFile As String, Optional JetVersion As Jet\_EngineV = [JET4X = 5], Optional PWD As String = "") As Boolean
On Error GoTo ErrHandler
If Not (CreateDatabase(sFile, JetVersion, PWD)) Then Call DeleteDB(sFile)
 If Not (OpenDatabase(sFile, PWD)) Then Call DeleteDB(sFile)
 'Tabellen erstellen
 If Not (CreateTable("Tabellenname")) Then Err.Raise 13
 'Felder erstellen
 If Not (CreateField("Tabellenname", "Feldname", adInteger, , True, , True)) Then Err.Raise 13
 CreateDB = True
 Exit Function
ErrHandler:
 Call DeleteDB(sFile)
End Function

'Datenbank löschen
Private Sub DeleteDB(sFile As String)
On Error Resume Next
If Recordsetname.State = adStateOpen Then Recordsetname.Close
If Con.State = adStateOpen Then Con.Close
 On Error GoTo 0
 Set Recordsetname = Nothing
 If FileExists(sFile) Then Kill (sFile)
 On Error GoTo 0
End Sub

Noch fix die nötigen Verweise gesetzt und volla schon biste flexibel was die Datenbanken angeht. Einfach das Modul in jedes Project kopieren und anpassen :smile: Habs nur ma fix aus meinen Project rauskopiert, also nicht schimpfen, wenn ich was vergessen habe :wink:

MfG Alex

1 Like

Hi Alex,

ich mag ja nicht schimpfen :s
Aber warum so unflexibel?

weil ich mit ADODB noch nicht ganz fit bin und immer recht froh, wenn ich damit überhaupt eine DB lesen kann. :smile: DAO fand ich ‚schöner‘. *fg*

Danke für den Code, den werde ich mir gleich kopieren und verwenden. :smile:

Gruß, Rainer

Hi Alex,

Hallo Rainer,

weil ich mit ADODB noch nicht ganz fit bin und immer recht
froh, wenn ich damit überhaupt eine DB lesen kann. :smile: DAO
fand ich ‚schöner‘. *fg*

Och na so schwer ist das nicht :wink: Und unter ADO bist du in meinen Augen flexibler :smile:

Danke für den Code, den werde ich mir gleich kopieren und
verwenden. :smile:

Nichts zu danken. Schau ihn dir einfach mal an und probiere ihn aus :smile:
Kann aber sein, das ich auf die schnelle das ein oder andere vergessen habe zu kopieren. wenn ja dann gebe mal bescheid :smile:

Gruß, Rainer

MfG Alex

Hi Alex,

ähmmm, ja, ein paar Kleinigkeiten fehlen mir. :smile:

Wenn ich mit dem Modul eine Tabelle schreibe, habe ich doch keinen Primärschlüssel? Wie bekomme ich den da hinein und wie kann ich Primärschlüssel lesen? Ich habe nämlich gerade eine Datenbank, die ich nicht selbst aufgebaut habe, habe Probleme damit und einen fehlerhaften Schlüssel in Verdacht. :smile:

Wie sieht es mit Relationen aus? Mit Access kein Problem, aber wie ich die per Code lesen und schreiben kann … keine Ahnung. Weißt Du darüber etwas?

Gruß, Rainer

Erst mal Danke!
Hallo Alex, hallo Rainer,

na, das sind ja schon hervoragend gute Hinweise - nun muss ich nur damit klarkommen.

Ich habe damals „nur“ für mich privat programmiert (ich hatte beruflich andere Programmiersprachen-Schwerpunkte) und da ist nach so langer Zeit - immerhin ca. 7 Jahre - völliger VB-Abstinenz halt doch einiges weg. Ich fange zwar nicht mehr bei Null an, muss mich aber dennoch erst wieder einarbeiten. Wenn ich mir so meinen Code von gestern anschaue - oh Gott, was bedeutet das alles? :wink:

Ich werde also voraussichtlich noch des Öfteren hier Anfragen stellen (müssen).

Nochmals vielen Dank!

Gruß, Robi

Hi Alex,

Hallo Rainer,

ähmmm, ja, ein paar Kleinigkeiten fehlen mir. :smile:

Naja dann schauen wir mal :smile:

Wenn ich mit dem Modul eine Tabelle schreibe, habe ich doch
keinen Primärschlüssel? Wie bekomme ich den da hinein und wie
kann ich Primärschlüssel lesen? Ich habe nämlich gerade eine
Datenbank, die ich nicht selbst aufgebaut habe, habe Probleme
damit und einen fehlerhaften Schlüssel in Verdacht. :smile:

Hmmm, ok das habe ich vergessen, genauso wie du einen Index anlegst.
Anbei zwei Routinen die das erledigen :wink:

Public Function CreateIndex(TableName As String, ColName As String, idxName As String, AllowNulls As AllowNullsEnum) As Boolean
On Error GoTo ErrHandler
Dim TBL As ADOX.Table
Dim IDX As New ADOX.Index
CatADO.ActiveConnection = Con
Set TBL = CatADO.Tables(TableName)
IDX.Name = idxName
IDX.Columns.Append ColName
IDX.IndexNulls = AllowNulls
TBL.Indexes.Append IDX
CreateIndex = True
Exit Function
ErrHandler:
 Call fAdoErr("CreateIndex")
End Function

Public Function CreateKey(TableName As String, ColName As String, KeyName As String, KeyType As KeyTypeEnum) As Boolean
On Error GoTo ErrHandler
Dim TBL As ADOX.Table
Dim NewKey As New ADOX.Key
CreateKey = True
CatADO.ActiveConnection = Con
Set TBL = CatADO.Tables(TableName)
NewKey.Name = KeyName
NewKey.Type = KeyType
NewKey.Columns.Append ColName
TBL.Keys.Append NewKey
Exit Function
ErrHandler:
 Call fAdoErr("CreateKey")
End Function

Um nun einen PrimaryKey zu erstellen, rufe einfach CreateKey wiefolgt auf

If CreateKey(TabellenNamen, "Feld", "Schluesselname", adKeyPrimary,) Then
'Dein Source
Else
 'Dein Source
End If

Wie sieht es mit Relationen aus? Mit Access kein Problem, aber
wie ich die per Code lesen und schreiben kann … keine
Ahnung. Weißt Du darüber etwas?

Na aber sicher doch :wink:
Unter Relationen verstehe ich, das du Tabellen miteinander verbindest. Du kannst da eine 1:1 Relation oder eine 1:N Relation erstellen.
Das alles machst du über ein SQL Statement :wink:
Pauschal kann man aber nicht sagen, wie es lauten muss, da du mit INNER OUTER LEFT und RIGHT JOIN arbeiten kannst :confused:
Das alles kommt darauf an was du erreichen willst :confused:

Prinzipiell ist de Aufbau wiefolgt

SELECT Tabelle1.Feld, Tabelle1.Feld,Tabelle2.Feld,Tabelle2.Feld FROM Tabelle1 INNER JOIN TABELLE2 ON Tabelle1.Feld=Tabelle2.Feld WHERE DEINE BEDINGUNG;

Als Bsp.

SELECT Kundenstamm.KNr, Kundenstamm.KName, Lieferungen.Menge, Lieferungen.Preis, Lieferungen.Datum
FROM Kundenstamm INNER JOIN Lieferungen ON Kundenstamm.KNr = Lieferungen.KNr; 

oder

SELECT Kundenstamm.KNr, Kundenstamm.KName, Lieferungen.Menge, Lieferungen.Preis, Lieferungen.Datum
FROM Kundenstamm INNER JOIN Lieferungen ON Kundenstamm.KNr = Lieferungen.KNr
WHERE Lieferungen.Preis \> 60 AND Lieferungen.Datum \> '14/01/2002'

Soweit alles klar?

Gruß, Rainer

MfG Alex

PS: Ist net getestet, sollte aber klappen :smile:

1 Like

Hallo Robi,

na poste doch einfach mal deine Routinen wie du auf die DB zugreifst :smile:
Desweiteren poste ruhig was du nicht verstehst. Vielleicht koennen wir ein wenig Licht ins Dunkel bringen :smile:

MfG Alex

Hi Alex,

Hmmm, ok das habe ich vergessen, genauso wie du einen Index
anlegst.
Anbei zwei Routinen die das erledigen :wink:

Public Function CreateIndex(TableName As String, ColName As
String, idxName As String, AllowNulls As AllowNullsEnum) As
Boolean
On Error GoTo ErrHandler
Dim TBL As ADOX.Table
Dim IDX As New ADOX.Index
CatADO.ActiveConnection = Con
Set TBL = CatADO.Tables(TableName)
IDX.Name = idxName
IDX.Columns.Append ColName
IDX.IndexNulls = AllowNulls
TBL.Indexes.Append IDX
CreateIndex = True
Exit Function
ErrHandler:
Call fAdoErr(„CreateIndex“)
End Function

Public Function CreateKey(TableName As String, ColName As
String, KeyName As String, KeyType As KeyTypeEnum) As Boolean
On Error GoTo ErrHandler
Dim TBL As ADOX.Table
Dim NewKey As New ADOX.Key
CreateKey = True
CatADO.ActiveConnection = Con
Set TBL = CatADO.Tables(TableName)
NewKey.Name = KeyName
NewKey.Type = KeyType
NewKey.Columns.Append ColName
TBL.Keys.Append NewKey
Exit Function
ErrHandler:
Call fAdoErr(„CreateKey“)
End Function

Um nun einen PrimaryKey zu erstellen, rufe einfach CreateKey
wiefolgt auf

If CreateKey(TabellenNamen, „Feld“, „Schluesselname“,
adKeyPrimary,) Then
'Dein Source
Else
'Dein Source
End If

wow! Danke! … Mal sehen, ob ich das so umstricken kann, daß ich den vorhandenen Primärschlüssel lesen kann.

Wie sieht es mit Relationen aus? Mit Access kein Problem, aber
wie ich die per Code lesen und schreiben kann … keine
Ahnung. Weißt Du darüber etwas?

Na aber sicher doch :wink:
Unter Relationen verstehe ich, das du Tabellen miteinander
verbindest. Du kannst da eine 1:1 Relation oder eine 1:N
Relation erstellen.
Das alles machst du über ein SQL Statement :wink:

Bisher stand das in der MDB. :smile:

Pauschal kann man aber nicht sagen, wie es lauten muss, da du
mit INNER OUTER LEFT und RIGHT JOIN arbeiten kannst :confused:
Das alles kommt darauf an was du erreichen willst :confused:

Prinzipiell ist de Aufbau wiefolgt

Soweit alles klar?

ähmmm, fast. :smile: Bei Access97 habe ich dann noch die Möglichkeit, für die Verknüpfung eine Aktualisierungsweitergabe und eine Löschweitergabe anzugeben. Diese Verknüpfungen stehen in der MDB und wirken unabhängig von meinen Abfragen. Da kann dann auch jemand anderes keinen Datenmüll hinterlassen.

Gruß, Rainer

Hi Robi,

ich möchte mich Alex anschließen. Poste ruhig mal etwas Code, am Besten so, daß er weitgehend komplett ist. Wenn der Fehler hat, stört das nicht, die zu finden ist das Brett ja da.

Ich werde also voraussichtlich noch des Öfteren hier Anfragen
stellen (müssen).

Na, ich hoffe doch, daß wir nicht so unangenehm sind, daß das ‚müssen‘ eine Strafe ist. :smile:

Gruß, Rainer

Hi Alex,

hi Rainer,

wow! Danke! … Mal sehen, ob ich das so umstricken kann, daß
ich den vorhandenen Primärschlüssel lesen kann.

Bisher stand das in der MDB. :smile:

Du meinst in der DB als View ?
Ich hatte mal probiert via VB Stored Proceduren in der DB abzulegen. Solange sie geöffnet waren, ging es. Aber sobald ich sie schloss und wieder geöffnet hatte, waren sie weg :s
Naja dann habe ich halt nen View genommen und volla das ging :smile:

ähmmm, fast. :smile: Bei Access97 habe ich dann noch die
Möglichkeit, für die Verknüpfung eine
Aktualisierungsweitergabe und eine Löschweitergabe anzugeben.

Naja das kannst du auch mit ADO lösen.Musst halt für jede Tabelle seperat löschen :frowning:

 Delete DeineFelder FROM DeineTabelle WHERE DeinFeld=DeineBedingung;

Sicher gibt es da noch einen einfacheren Weg, aber auf die schnelle faellt mir nix besseres ein *schaem* Am besten ist es wenn du dir mal unter Access mal das SQL Statement anzeigen laesst! Dieses kannst du dann auch unter VB6 mit Ado ansetzen! Access löst eigentlich auch alles via SQL :wink:

Diese Verknüpfungen stehen in der MDB und wirken unabhängig
von meinen Abfragen. Da kann dann auch jemand anderes keinen
Datenmüll hinterlassen.

Dann ist es als View hinterlegt. Diese kannst du auch unter VB mit ADO anlegen :wink:

Gruß, Rainer

MfG Alex

Hi Alex,

Bisher stand das in der MDB. :smile:

Du meinst in der DB als View ?

hmmm, ich kann Dir einen Screenshot schicken, wie das in Access97 aussieht, mehr weiß ich darüber nicht. Keine Ahnung, wie und wo Access das sichert. Access97 bezeichnet das als ‚Layout‘. Ich bin schon zufrieden, daß ich mit der Oberfläche einigermaßen zurecht komme.

Ich hatte mal probiert via VB Stored Proceduren in der DB
abzulegen. Solange sie geöffnet waren, ging es. Aber sobald
ich sie schloss und wieder geöffnet hatte, waren sie weg :s
Naja dann habe ich halt nen View genommen und volla das ging

)

Hier verstehe ich erst mal nur ‚Bahnhof‘. :smile: Das ist zu hoch für mich, ich weiß noch nicht mal, wovon Du redest. :frowning:

ähmmm, fast. :smile: Bei Access97 habe ich dann noch die
Möglichkeit, für die Verknüpfung eine
Aktualisierungsweitergabe und eine Löschweitergabe anzugeben.

Naja das kannst du auch mit ADO lösen.Musst halt für jede
Tabelle seperat löschen :frowning:

hmmm. Das ist nicht schön. Wenn eine MDB aus rund 30 verknüpften Tabellen besteht und das Projekt dahinter aus knapp 100 Programmen, wird mit der Methode sicher irgendwann irgendwo Datenmüll übrig bleiben, ohne daß man leicht herausfinden kann, warum.

Sicher gibt es da noch einen einfacheren Weg, aber auf die
schnelle faellt mir nix besseres ein *schaem* Am besten ist es
wenn du dir mal unter Access mal das SQL Statement anzeigen
laesst! Dieses kannst du dann auch unter VB6 mit Ado ansetzen!
Access löst eigentlich auch alles via SQL :wink:

Wenn ich mit Access97 eine Abfrage erstelle, kann ich mir den SQL-String anzeigen lassen, kein Problem. Beim Layout stehen unter ‚Anzeige‘ keine Optionen, Access97 zeigt mir an der Stelle keinen Code, nur die Graphic. :frowning:

Diese Verknüpfungen stehen in der MDB und wirken unabhängig
von meinen Abfragen. Da kann dann auch jemand anderes keinen
Datenmüll hinterlassen.

Dann ist es als View hinterlegt. Diese kannst du auch unter VB
mit ADO anlegen :wink:

Danke, ich such mal etwas nach ‚View‘. :smile:

Eigentlich würde ich das ja Access erledigen lassen, aber Access 2000 und Access 97 streiten sich, die wollen nicht Beide auf meinen Computer. :frowning: Auf Access97 kann ich aber wegen den produktiv laufenden Programmen nicht verzichten, deshalb bekomme ich mit Access2000/2003 immer Probleme, weil ich die Datenbanken nur mit VB6 lesen kann. Ich werde mir wohl bald mal einen zweiten Computer an meinen Arbeitsplatz stellen und 'nen KVM-Switch dazu. :smile:

Gruß, Rainer