Results 1 to 10 of 10

Thread: nldclientdataset missing data provider

  1. #1
    Senior Member arnold's Avatar
    Join Date
    Aug 2002
    Location
    Almelo
    Posts
    807

    nldclientdataset missing data provider

    ik heb de database tools gedownload van dees, want ik wou mijn data saven als csv zodat ik een mailmerge kan doen ik word.

    alleen als ik dit componentje op mijn form kwak, ik vul bij mastersource de dataset in waarvan ik de data wil.
    ik vervolgens het componentje op active zet krijg ik een foutmelding

    "cds: missing data provider or data packet"


    wat moet ik eigenlijk met deze foutmelding, ik kan ook geen dataprovider selecteren.
    is er iets wat ik over het hoofd zie.

    [edit] dit probleem is nu opgelost, alleen als nu het component op active gezet wordt doorloopt hij de hele tabel en komt vervolgens met een foutmelding.

    ---------------------------
    Debugger Exception Notification
    ---------------------------
    Project beveiligingsbasev30.exe raised exception class EVariantTypeCastError with message 'Could not convert variant of type (Array Variant) into type (String)'.
    ---------------------------
    Break Continue Help
    ---------------------------

    wat is hier de oorzaak van
    Last edited by arnold; 10-May-06 at 20:34.
    Computers make very fast, very accurate mistakes.

  2. #2
    Senior Member arnold's Avatar
    Join Date
    Aug 2002
    Location
    Almelo
    Posts
    807
    ik ben weer iets verder maar weet niet waarom het mis gaat. als ik via breakpoints in de code kijk, dan heeft de dataset een extra veld gekregen en dat is de detail dataset. ik heb geen idee hoe die hierin terecht komt.

    speciaal voor dees, als ontwerpster.

    ik heb 1 ibquery, waarin de data staat welke ik wil exporteren.
    tevens heb ik 1 ibdataset welke middels het veld datasource gekoppeld is met de ibquery

    als dit veld is ingevuld dan gaat jou component de fout in, hij ziet dan de datasource ook als een veld.
    Last edited by Dees; 10-May-06 at 21:17.
    Computers make very fast, very accurate mistakes.

  3. #3
    • Verplaatst van Algemeen naar NLDDatabaseTools .


    Kun je daar es een demo van maken?

    Het lijkt me niet dat mijn component er ineens een extra veld bij bedenkt .

    Ik begrijp ook nog niet helemaal waar je heen wilt Maar dat komt vast en zeker later.

    Denk denk...

    klinkt alsof de master/detail er 1 veld bij stopt met daarin een array of variants die je records weergeven? Zou dat misschien kunnen?
    Last edited by Dees; 14-May-06 at 13:31.

  4. #4
    Senior Member arnold's Avatar
    Join Date
    Aug 2002
    Location
    Almelo
    Posts
    807
    tja dees een demo wordt lastig denk ik.

    Kan het zo zijn dat als ik in een dataset het datasource veld kopel aan de master tabel (ibquery tabel) deze tabel een extra veld krijgt met de naam van de dataset ?

    want als ik via breakpoints kijk dan is het laatste veld de naam van mijn dataset.

    hij schrijft die naam ook weg in de header van de csv file.
    Computers make very fast, very accurate mistakes.

  5. #5
    ja het lijkt er dan inderdaad op dat wat ik al zei, er een extra veld wordt opgenomen met een DataSet.

    Dus dan zul je eens moeten kijken in de Export wat voor type field het is. (bijvoorbeeld).

  6. #6
    Senior Member arnold's Avatar
    Join Date
    Aug 2002
    Location
    Almelo
    Posts
    807
    hoe bedoel je kijken in de export ?
    hij geeft bij de foutmelding aan dat het een variant is. is het niet mogelijk om op dat type veld te controleren net zoals je doet met isnull ?
    Computers make very fast, very accurate mistakes.

  7. #7
    Ik zal dit weekend even een test applicatie in elkaar proberen te draaien en kijken wat ik bedoel en kijken of ik het ook kan oplossen. Momenteel heb ik even geen / weinig tijd.

    Ik ben / We zijn, je niet vergeten.

  8. #8
    Het lijkt erop dat je gebruik hebt gemaakt van nested ClientDataSets, maar dan zonder dat je het wist .

    Bij een nested clientdataset zet je op de server een master/detail relatie op tussen twee datasets. Als je nu de master koppelt aan een provider krijg je niet alleen de data van die dataset, maar ook de detail data van de onderliggende dataset.

    Ik ben zelf niet zo'n fan van nested clientdatasets. Het is een wat starre opzet waar de server bepaalt wat de client ophaalt, dat vind ik in dit geval niet juist.

    Maar goed, op naar jouw probleem

    Ik heb een demo gemaakt waarin je ziet wat er mis gaat. Hier is de hierboven geschetste setup gemaakt zodat er een ClientDataSet is met een detail dataset. En inderdaad, de export naar CSV geeft de betreffende foutmelding. Gelukkig is de oplossing simpel: door het betreffende veld uit de persistent fields te verwijderen. Het veld wordt dan niet meer gezien en de overige velden worden netjes geëxporteerd.

    Uiteraard kan het ook in het component zelf worden opgelost. In de TDataSetToCSV.ExportData method moet dan een uitzondering worden gemaakt voor een TDataSetField:

    Code:
          while not EOF do
          begin
            RowValue := '';
            for i := 0 to Fields.Count - 1 do
            begin
              if not (Fields[i] is TDataSetField) then
                with Fields[i] do
    
    Ik heb mijn voorbeeldapp bijgesloten.
    Attached Files Attached Files
    Marcel

  9. #9
    Senior Member arnold's Avatar
    Join Date
    Aug 2002
    Location
    Almelo
    Posts
    807
    en hoe kan ik voorkomen dat ik nested datasets gebruik ? ik weet niet eens wat dat zijn dus wist niet eens dat ik die gebruikte
    zie voor een aantal tabelen http://www.nldelphi.com/Forum/showthread.php?t=24637

    ik loop ook nog tegen een nieuw probleem op, als ik een nieuw id nummer invul, dan worden de oude gegevens weggeschreven.
    Computers make very fast, very accurate mistakes.

  10. #10
    Punt 1: Doordat je de Query via een DataSet ook nog eens koppelt aan je IBDataSet krijg je een nested dataset. Om dit te voorkomen zou je kunnen zorgen dat je bijvoorbeeld 1 ClientDataSet hebt. In deze ClientDataSet staan al alle velden. Deze kun je of Runtime aanmaken of zorgen dat je gekoppelde dataset deze velden allemaal al bevat.

    Deze ClientDataSet koppel je aan een DataSetProvider. De DataSetProvider koppel je aan een query. In het OnGetData-Event van je DataSetProvider kun je door je DataSet heen lopen en hier gewenst nog data aan toevoegen. Je kunt hier ook een tweede query openen en door middel van een locate op het ID nog velden op die regel bijwerken.

    Let op als je met het OnGetData-Event werkt moet je aan het einde van de routine je DataSet weer op het eerste record zetten.

    Punt 2: Kun je die even in een nieuwe thread stellen? Met iets meer info ik begrijp het niet helemaal.

Thread Information

Users Browsing this Thread

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

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
  •