ADO Steuerelement ConnectionString

Hallo VB-ler,

ich bin, wie hier schon mal erwähnt, dabei, mich wieder in VB einzuarbeiten und meine alten DB-Anwendungen von DAO auf ADO umzustellen. Dabei stieß ich auf dieses Problem:

in einem Formular habe ich ein DBGrid und das zugehörige Adodc-Steuerelement. Dort muss ich ja im Formulardesigner den Pfad zur Datenbank angeben. Dieser ist absolut und liegt bei mir im Verzeichnis „App.Path\Database“. Was bei meiner rein privaten Anwendung nicht stört, denn ich weiß ja, wo das ist, also z.B. D:\Programme\MyApp\Database\MyDB.mdb. Was aber, wenn ich das nicht weiß?.
Nun dachte ich, da mit: Adodc1.ConnectionString ="…;Data Source=" + App.Path + „\kalender.mdb;…“ den Pfad ändern zu können.

Ich fand aber keinen Weg, das im Adodc-Steuerelement zur Laufzeit einzutragen, der macht das einfach nicht. Geht das grundsätzlich nicht oder habe ich da einen Denkfehler?

Danke für euere Hilfe!

Gruß, Robi

Hi Robi,

exakt die selbe Frage habe ich neulich auf AVB auch gestellt und folgende Antwort von einem Experten bekommen:

Helge Rex schrieb folgendes:

Ueberschrift: "Re: Find mit DAO -\> ADO"

Zu 1:
Diese gebundenen Steuerelemente sind Schrott. Mache alles von Hand, dann hast Du Ruhe.
[code]Dim strSQL As String
Dim objRS As ADODB.Recordset

strSQL = "SELECT \* " & \_
 "FROM meinetabelle " & \_
 "WHERE (FldStr1 = '" & VarStr1 & "') And (FldStr2 = '" & VarStr2 & "');"

Debug.Print strSQL

Set objRS = New ADODB.Recordset
With objRS
 Set .ActiveConnection = objConnection
 .CursorLocation = adUseClient
 .CursorType = adOpenStatic
 .LockType = adLockOptimistic
 .Source = strSQL
 Call .Open(options:=adcmdtext)
End With[/code]


Grüße
Helge

Gruß, Rainer

Hallo Rainer,

schön, dass ich nicht der einzige mit solchen Problemen bin. Bei mir kommt aber noch dazu, dass ich „raus“ bin und erst mal alles wieder neu verstehen muss. Von dem, was du mir jetzt weitergegeben hast, verstehe ich zunächst nur Bahnhof. Ok, ich arbeite dran und werde auch das noch kapieren.

Aber eine klare Antwort war das auch nicht. Sooo Schrott sind solche Steuerelemente m.E. nun auch wieder nicht; für bestimmte Dinge kann man sie durchaus ganz gut verwenden. Eine klare Antwort (sicher auch für dich) wäre gewesen: „geht prinzipiell nicht“ oder „ist so und so zu machen“ - und dies dann auch für einen (Wieder-)Einsteiger verständlich erklärt.

Aber so sind sie nun mal, die Experten. Ich ertappe mich ja selbst immer wieder, dass ich bei anderen einfach vieles voraussetze.

Einen schönen Rest-Sonntag noch!

Gruß, Robi

Hallo Robi,

was Dir Rainer oder auch Helge damit sagen wollte ist folgendes.
Mit ADO geht das auch :smile:
Es ist nur etwas anders wie bei DAO. Dafür kannst du aber mehr machen :smile:

Du öffnest doch dein Recordset! Wenn du nun bestimmte Datensaetze haben möchtest (die die du mit Find unter DAO gesucht hast) so machst du das mit einem SQL Statement :smile: Schliesse einfach dein geöffnetes Recordset und öffne es mit dem entsprechenden SQL Statement :smile:

Ich selbst habe mir mal ein Modul geschrieben, was das unter anderem macht. Irgendwo hier hatte ich das schon einmal Rainer gepostet :smile:

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:
 'Hier kannst du deine Fehler behandeln :wink:
End Function

Nehmen wir nun einmal an. Du hast ein Datagrid und möchtest dort nur die Datensaetze aus der DB anzeigen wo der Vorname „Alex“ ist, so könnte das dann so ausschauen :smile:

'Grid = Datagrid
'RS = Dein Recordset
'Personen = Tabelle Personen in der DB
'Vorname = Feld in der Tabelle Personen das durchsucht werden soll

'Source
 If RunSql("SELECT \*FROM Personen WHERE Vorname Like 'Alex' ORDER BY ASC;",RS) then
'SQL Statement erfolgreich ausgefuehrt
If Rs.Recordcount=0 then
'Keine Datensaetze gefunden 
MsgBox "Es wurden keine Datensaetze gefunden!",16
Else 
 'Datensaetze wurden gefunden
Set Grid.Datasource=Nothing
Set Grid.DataSource=RS
End If
Else
'SQL Statement nicht erfolgreich ausgeführt
'Dein Source
End If 

Ist aus dem Stehgreif getippselt und nicht getestet. Sollte aber laufen :smile:

MfG Alex

Hallo Robi,

Aber eine klare Antwort war das auch nicht. Sooo Schrott sind
solche Steuerelemente m.E. nun auch wieder nicht; für
bestimmte Dinge kann man sie durchaus ganz gut verwenden. Eine
klare Antwort (sicher auch für dich) wäre gewesen: „geht
prinzipiell nicht“ oder „ist so und so zu machen“ - und dies
dann auch für einen (Wieder-)Einsteiger verständlich erklärt.

mit dem Steuerelement kannst Du auch eine Verbindung zu einer ADO Datenbank herstellen, ja. Aber wenn Du etwas suchen willst, geht es eben schon nicht mehr, wie Du das von DAO gewöhnt warst. (Das war mein Problem) Das DAO Steuerelement konntest Du auch per Code mit einer Datenbank verbinden, von der Du bei der Entwicklung den Pfad noch nicht kennst, mit dem ADO-Steuerelement geht das auch nicht, diese Eigenschaft lässt sich zu Laufzeit nicht verändern. [Wenn ich mich recht erinnere, ich habe jetzt nicht nachgesehen.] (Das ist Dein Problem) Vorteile bringt das Steuerelement aber keine. Der Code (und auch der von Alex) funktioniert aber. Den kannst du auch verwenden, wenn Du ihn nicht verstanden hast, die Stelle, an der der Pfad eingetragen wird, ist ja leicht zu finden. Wenn Du dann allerdings filtern willst, sind ein paar Grundkenntnisse über SQL schon nützlich.

Aber so sind sie nun mal, die Experten. Ich ertappe mich ja
selbst immer wieder, dass ich bei anderen einfach vieles
voraussetze.

Einen schönen Rest-Sonntag noch!

Danke, wünsche ich Dir auch.

Gruß, Rainer

Erstmal vielen Dank!
Hallo,

tja, so ist das eben: da gibt es Dinge, die von der Sache her eigentlich gut wären, aber dennoch in der Praxis unbedingt brauchbar. Weil, eigentlich ist ja so ein DB-Grid nebst Steuerelement eine feine Sache (meine ich); nimmt einem eigentlich etliches an Arbeit ab. Hat aber leider auch so seine Tücken.

Ok, dann eben händisch. Damit habe ich keine Probleme, die prinzipielle Anwendung von ADO habe ich verstanden, mit SQL kenne ich mich gut aus und zwei meiner alten DAO-Projekte laufen schon hervorragend mit ADO. Gut, manches mache ich sicherlich noch recht umständlich, aber Übung macht auch hier den Meister!

Bis zu meinem nächsten Problem!

Gruß

Robi