Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

ADO - Keine Datenquelle

146 views
Skip to first unread message

Friedhelm Bolte

unread,
May 31, 2001, 5:38:30 AM5/31/01
to
Hallo NG,
folgender Code verursacht in VB6 eine Fehlermeldung ????

Dim sql As String
sql = "SELECT All From Adressen"
sql = sql & "ORDER BY Adressen.Namen, Adressen.Vornamen;"
Adodc1.RecordSource = sql
Adodc1.Refresh
DataGrid1.Visible = True

Meldung:

(ADODC): Keine Datenquelle angegeben. (ADO): Für das Befehlsobjekt wurde
kein Befehlstext festgelegt.

Diese Meldung erscheint beim Start und Beenden des Programms und kann
weggeklickt werden. Das Programm läuft dann trotzdem korrekt.
Ich verstehe nur die Meldung nicht.
Der Berfehlstext wird doch über

Adodc1.RecordSource = sql

zugewiesen.
Was mache ich da nur wieder falsch ?
Vielen Dank.
Gruß Friedhelm


Peter Fleischer

unread,
May 31, 2001, 7:54:15 AM5/31/01
to
Friedhelm,
schau Dir mal www.gssg.de an. Dort sind Beispiele, wie man es richtig
professionell machen kann. "SELECT All From" dürfte auch fehlerhaft
sein. Ansonsten habe ich mit der Vorgehensweise keine Probleme (VB6,
ADO2.6, Jet40SP5).

Peter

"Friedhelm Bolte" <1012...@freenet.de> schrieb im Newsbeitrag
news:3B161116...@freenet.de...

Friedhelm Bolte

unread,
May 31, 2001, 1:07:25 PM5/31/01
to Peter Fleischer
Ich habe mich falsch ausgedrückt.
Es ist eine DataGrid mit einem Steuerelement Adodc1 verbunden.
Anscheinend muß im Adodc1 die Eigenschaft Recordsource mit einem
SQL-String ausgefüllt werden.
Das habe ich auch gemacht. Beim laden der Form wird dann von VB sofort
das Grid ausgefüllt.
So sollte das natürlich nicht sein.
Also habe ich die Recordsource bei Adodc1 in der Form leergelassen.
Ich will Recordsource erst im Programm an der Stelle zuweisen, wenn es
gebraucht wird.
Wenn ich Recordsource weglasse, bringt VB beim Start, sowie Verlassen
des Programms besagte Meldung (kein Ado-Befehl).
Ich weiß nicht wie ich das Verhindern kann.
Wenn Ihr mir da einen kurzen Tip geben könntest.
Vielen Dank.
Gruß Friedhelm

Friedhelm Bolte

unread,
May 31, 2001, 1:10:03 PM5/31/01
to Peter Fleischer
Ich habe mich vielleicht falsch ausgedrückt.

Es ist eine DataGrid mit einem Steuerelement Adodc1 verbunden.
Anscheinend muß im Adodc1 die Eigenschaft Recordsource mit einem
SQL-String ausgefüllt werden.
Das habe ich auch gemacht. Beim Laden der Form wird dann von VB sofort
das Grid ausgefüllt.
So soll das natürlich nicht sein.

Also habe ich die Recordsource bei Adodc1 in der Form leergelassen.
Ich will Recordsource erst im Programm an der Stelle zuweisen, wenn es
gebraucht wird.
Wenn ich Recordsource weglasse, bringt VB beim Start, sowie Verlassen
des Programms besagte Meldung (kein Ado-Befehl).
Ich weiß nicht wie ich das Verhindern kann.
Wenn Ihr mir da einen kurzen Tip geben könntest.
Vielen Dank.
Gruß Friedhelm

Peter Fleischer

unread,
May 31, 2001, 3:24:09 PM5/31/01
to
Friedhelm,
das ADODC und Dataenvironment sind recht bequem, wenn Du zur Entwurfszeit
alles festlegen kannst. Eine Vielzahl von Aktivitäten realisieren diese
Steuerelemente selbständig. Du gibst damit die Kontrolle ab und wunderst
Dich über implizite Aktivitäten.

Deshalb meine Empfehlung: wirf das ADODC raus und schau Dir auf www.gssg.de
an, wie man es professionell macht. Dazu gehört:

Verbindung zur Datenbank erst mit den zur Ausführung bekannten Angaben
herstellen.
Recordset auf Basis dieser Verbindung laden
Controls an das Recordset binden

Peter

Friedhelm Bolte <1012...@freenet.de> schrieb in im Newsbeitrag:
3B167A4D...@freenet.de...

Peter Götz

unread,
Jun 1, 2001, 7:03:56 AM6/1/01
to
Tag Friedhelm,

> Es ist eine DataGrid mit einem Steuerelement Adodc1 verbunden.

und dessen .DataSource-Eigenschaft hast Du vermutlich schon zur Designzeit
auf ADODC1 gesetzt. (?)

> Anscheinend muß im Adodc1 die Eigenschaft Recordsource mit einem
> SQL-String ausgefüllt werden.

irgendeine Recordsource braucht das ADODC natürlich. Das kann entweder ein
Tabellenname oder eben ein SQL-Statement sein.

> Das habe ich auch gemacht. Beim Laden der Form wird dann von VB sofort
> das Grid ausgefüllt.
> So soll das natürlich nicht sein.

wie soll's dann sein ?

> Also habe ich die Recordsource bei Adodc1 in der Form leergelassen.
> Ich will Recordsource erst im Programm an der Stelle zuweisen, wenn es
> gebraucht wird.
> Wenn ich Recordsource weglasse, bringt VB beim Start, sowie Verlassen
> des Programms besagte Meldung (kein Ado-Befehl).

das passiert, weil das DataGrid an Deinem ADODC1 hängt und Daten haben
möchte.
Das ADODC1 kann aber keine Daten bereitstellen, weil es keine Recordsource
hat.

> Ich weiß nicht wie ich das Verhindern kann.

wenn Du ADODC1.Recordsource zur Designzeit leer lässt, musst Du auch
DataGrid.DataSource erst mal noch leer lassen.

Im Programm kannst Du dann später ADODc1.Recordsource entsprechend versorgen
und erst danach bindest Du Dein DataGrid an das DataControl

Set DataGrid.DataSource = ADODC1

Aber wenn Du wirklich lernen willst, was bei einer Verbindung zu einer
Datenbank und beim Zugriff auf deren Daten passiert, solltest Du das ADODC
am besten ganz vergessen. Das Ding verschleiert nur die tatsächlichen
Abläufe und hindert Dich daran zu verstehen, was wann wirklich abläuft.
Definiere in Deinem Programm besser ein ADODB.Connection-Objekt sowie ein
oder bei Bedarf auch mehrere Recordset-Objekte und arbeite direkt mit diesen
Objekten. Du hast dann die volle Kontrolle über alle Abläufe und kannst auf
alle Eigenschaften und Ereignisse dieser Objekte zugreifen. Ein DataGrid
oder auch andere Controls kannst Du an ein Recordset ebenso bequem wie an
das DataControl binden:

Set DataGrid.DataSource = DeinRecordset

Beim DataGrid solltest Du Dich allerdings auf eine ganze Reihe von Bugs
gefasst machen. Verzichte besser darauf neue Datensätze direkt ins DataGrid
einzugeben bzw. vorhandene Datensätze darin zu ändern. Dafür verwendest Du
besser "ungebundene" Textboxen, Comboboxen usw.
Das DataGrid kann dann z.B. dem Benutzer die Datensätze zur besseren
Übersicht anzeigen und der Benutzer kann im DataGrid zu den gewünschten
Datensätzen navigieren. Änderungen und Neueingaben werden aber in den
ungebundenen Controls gemacht.
Damit hast Du im Programm (gegenüber gebundenen Controls) eine wesentlich
bessere Kontrolle über die Aktivitäten des Benutzers und vermeidest so auch
noch die Probleme, welche durch die vielen Bugs im DataGrid bei einer
direkten Eingabe von Daten ins DataGrid entstehen würden.

Wie so was konkret aussieht, kannst Du Dir unter

www.gssg.de -> VB-Tips -> Datenbank -> "AOD DemoMU"

ansehen. Im Klassenmodul clsADOData.cls dieses Programms findest Du alle
notwendigen Prozeduren zum Öffnen von Connections u. Recordset, zum Erzeugen
ganzer Datenbanken, sowie weitere Prozeduren zum Bewegen innerhalb des
Recordsets und zum Auffinden von Datensätzen.

Die Klasse clsDGridExt.cls erweitert das DataGrid um einige fehlende
Funktionalitäten, wie z.B. Markieren mehrerer Zeilen in zusammenhängenden
Blöcken per Tastatur oder Maus und Sortieren des Recordsets nach einem Klick
auf einen der Spaltenköpfe des DataGrid nach der jeweiligen Spalte.

Gruss aus St.Georgen,
Peter Götz
p.g...@gssg.de
www.gssg.de (mit VB-Tips u. Beispielprogrammen)

0 new messages