Results 1 to 6 of 6

Thread: Wel een datasource, geen velden

  1. #1
    Senior Member AntonSteen's Avatar
    Join Date
    Dec 2006
    Location
    IJsselmonde (Rotterdam)
    Posts
    352

    Wel een datasource, geen velden

    Goedemorgen allemaal.

    Ik heb een probleem waar ik niet echt uitkomt, gisteren voor het eerst met een datamodule en de datasource een verbinding gemaakt met een grid.
    Kort er na wilde ik wat velden aan dezelfde database hechten.
    Zodra ik een veld selecteer, ziet deze wel de datamodule en de datasource, maar geen velden vanuit de database.

    Nu denk ik dat dit komt omdat ik dit allemaal via code heb gekoppeld, en dus niet visueel.
    Ik zal dus (denk ik) ook alle velden via code moeten verbinden, alleen de vraag is hoe.
    Is er iemand die mij een heel klein duwtje in de goede richting kan geven.

    Ter illustratie heb ik een plaatje toegevoegd zodat men kan zien wat er word bedoeld
    Click image for larger version. 

Name:	No_datafield.jpg 
Views:	278 
Size:	99.6 KB 
ID:	6951

    Ik maak gebruik van Lazarus, de standaard componenten, Firebird en Windows 7
    Lazarus als hobby, en dan niet in de kroeg
    http://www.wavdsteen.com

  2. #2
    Jan
    Join Date
    Oct 2007
    Location
    Mijdrecht
    Posts
    906
    Ziet er uit als een database/query die niet geopend is op designtime.

  3. #3
    Senior Member AntonSteen's Avatar
    Join Date
    Dec 2006
    Location
    IJsselmonde (Rotterdam)
    Posts
    352
    Jan, zou je een heel klein voorbeeld kunnen geven hoe ik dit per veld zou kunnen doen
    Lazarus als hobby, en dan niet in de kroeg
    http://www.wavdsteen.com

  4. #4
    De DBEdit zit aan een datasource. Dit zit aan een dataset (bijvoorbeeld een table of query). Als de dataset op een aparte datamodule staat, dan zul je die meestal in code met elkaar verbinden. Dat is goed en zelfs noodzakelijk als je met meerdere instanties van het scherm en de datamodule wilt werken.

    Niettemin, om in design time al de velden te kunnen koppelen, moet de datasource weten welke velden er zijn. Hiervoor zul je dus ook design time al de datasource aan de dataset moeten koppelen.

    Als je niet gebruik maakt van persistent velden (velden toegevoegd in de Fields editor van de dataset), dan verzint de dataset zelf de velden zodra hij geopend wordt (active = true). Om de velden in het lijstje te zien te krijgen moet je dus design time de dataset openen. Delphi zal dan de beschikbare velden in de object inspector tonen. Hiervoor kan het dus ook nodig zijn om al connect-informatie in te vullen bij een database connection waar de dataset weer mee verbindt.
    1+1=b

  5. #5
    Senior Member AntonSteen's Avatar
    Join Date
    Dec 2006
    Location
    IJsselmonde (Rotterdam)
    Posts
    352
    Ik heb het volgende in de code verwerkt, overigens zonder succes, maar komt (denk ik) wel overeen met het verhaal van GolezTrol.

    Connect.Connected := true;
    Connect.Transaction.Active := true;
    SQLQuery.DataBase := connect;
    SQLQuery.SQL.Text := 'select * from Persoon';
    SQLQuery.Active := True;
    DS1.DataSet := SQLQuery;
    In het stukje code stata de SQLQuery op actief, of heb ik het nu volledig mis.
    Last edited by AntonSteen; 18-Apr-15 at 13:11. Reason: Weergave code aangepast
    Lazarus als hobby, en dan niet in de kroeg
    http://www.wavdsteen.com

  6. #6
    Je bouwt je SQL en connecties in run-time op. Dat betekend dat je in design-time geen toegang hebt tot het resultaat van de query, dus ook niet tot de velden. (Je ziet dit ook aan het feit dat je DBGrid geen velden bevat)

    Je kunt nu twee dingen doen.
    1. Zelf je veldnamen typen (en niet uitzoeken met een pulldown). Dus voor veld NAAM gewoon type in Datafield-veld.
    2. Zet al je connectie-eigenschappen niet in run-time maar in designtime op de juiste plek. Daarna kun je Active van je Query op true zetten en krijg je designtime toegang tot alle velden.


    Voor punt 2 moet je dus het volgende doen:
    • Zet alle juiste properties voor Connect zoals je nu ook in code van FormCreate doet
    • Al die code kan dan uit je FormCreate gehaald worden (omdat ze al goed staan)
    • Hang Connect aan de database property van SQLQuery (in designtime)
    • Hang je 'select * from Persoon' in de SQL-property van je SQLQuery
    • Hang SQLQuery aan je Dataset-property van DS1
    • Zet Connected van Connect op true
    • Zet Active can SQLQuery op true


    Als je dit op die manier doet heb je ook toegang tot de Column van je DBGrid zodat je die e.v. op de juiste breedte kunt zetten.

    Vergeet niet bij je uiteindelijke programma je Active en Connected op false te zetten. Want als je je programma zonder database gaat verspreiden moet de code om de database te maken wel eerst uitgevoerd worden (in FormCreate). Dit werkt niet als je programma eerst Connected op true zet voordat de database gemaakt is. (En FormCreate wordt uitgevoerd NA het zetten van de properties die jij in designtime hebt gezet).

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •