FileExists -> Anwendbar auf Tabelle?



  • Also ich habe bereits eine Funktion, in der ich aus einer Tabelle den Namen einer Datei auslesen, und frage ob diese Datei auf der Festplatte existiert.

    Aber jetzt möchte ich dies umgekehrt machen.
    Ich habe jetzt alle Dateien aus dem Verzeichnis in eine Liste eingetragen.
    Nun habe ich vor, diese Dateien mit einer Tabelle in einer Datenbank zu vergleichen.

    Funktioniert das auch mit FileExists und wenn ja, wie genau?

    if (FileExists (???)   // was muss dort dann evtl. stehen?
    

    thx
    Bj



  • if (FileExists (???) ???? versteh ich nicht ganz wie du darauf kommst.

    wenn du deine liste mit der datenbank abgleichen willst (welche DB is das ?),
    laesst du die datenbank nach den dateien deiner liste absuchen.

    Meep Meep



  • @Bj: Du hast ja die Liste mit den Dateinamen. Jetzt musst du in der Tabelle mittels SQL einfach nach dem Dateinamen abfragen und dann sehen was das ergebnis der Abfrage ist. Mach dich mal schlau über sog. SELECT-Abfragen.

    -junix



  • @meep meep
    habe mir das so vorgestellt:

    if (FileExists (Tabellenname + die Datei)

    @junix
    also fülle ich die Eigenschafft SQL dann immer mit einem neuen wert oder?
    also bei jedem schleifenurchlauf, bei dem ein bestimmter wert der Liste ausgewählt wird, wird dieser wert in einer select-afrage abgefragt, ob dieser in der tabelle existiert?
    so zB?:
    Query1 -> SQL->Add("select "Zu-Suchender-Name" as Variable01 from vapbitmap).

    und wie lautet dann die if abfrage?
    if (Variable01 ... ? )

    thx
    Bj



  • Du könntest deine Liste in einer Schleife durchgehen und jeweils einen Select ala

    select count(*) as Zaehler from Tabelle_X where Dateiname = 'irgendeindateinameausdeinerListe'

    machen.

    Dann wertest du den Zaehler aus und kannst feststellen ob ein Datensatz fuer die Datei vorhanden ist.

    PS: äöü... langsam kann ich keine deutschen Zeichen mehr schreiben 🙂



  • SELECT * FROM Tabellename WHERE ??? = "Zu suchende Datei"

    ist das der richtige befehl?
    wo die fragezeichen stehen, weiß ich nicht was ich eintragen soll?!?!
    sollte da die tabellenspalte stehen?

    thy
    Bj



  • Naja du hast ja den Dateinamen in einer Spalte stehen.. zumindest habe ich das so verstanden.
    Dann musst du natürlich auch den Spaltennamen angeben.

    Also müsste ??? der Spaltennamen sein in der du die Dateinamen stehen hast.



  • da kommt der spaltenname, in dem deine dateinamen gespeichert sind, rein



  • @MikeSPK

    ja genauso habe ich mir das vorgestellt.
    würde der Code dann so aussehen?:

    for (int i=0,i<FileList->Count,i++)
     {
      Query1 -> SQL -> Add ("select count(*) as Zaehler from Tabelle_X where  
                             Dateiname = 'Dateiname aus Liste');
     // .... 
     }
    

    tja und schon komme ich nich weiter.
    wie lese ich den zaehler denn aus?
    also ich würde gerne, das WENN die datei in der tabelle NICHT vorhanden ist, diese datei dann ausgespuckt wird.

    den zaehler muss ich so auslesen oder:
    Datentyp BLABLA = Query1 -> FieldByName("Zaehler")
    ??

    thx
    Bj



  • Bj schrieb:

    @MikeSPK

    ja genauso habe ich mir das vorgestellt.
    würde der Code dann so aussehen?:

    for (int i=0,i<FileList->Count,i++)
     {
      Query1 -> SQL -> Add ("select count(*) as Zaehler from Tabelle_X where  
                             Dateiname = 'Dateiname aus Liste');
     // .... 
     }
    

    tja und schon komme ich nich weiter.
    wie lese ich den zaehler denn aus?
    also ich würde gerne, das WENN die datei in der tabelle NICHT vorhanden ist, diese datei dann ausgespuckt wird.

    den zaehler muss ich so auslesen oder:
    Datentyp BLABLA = Query1 -> FieldByName("Zaehler")
    ??

    thx
    Bj

    ich würe mich sehr wundern, wenn zaehler von typ TDateTime wäre.

    natürlich AsInteger



  • dann eben so:
    Datentyp BLABLA = Query1 -> FieldByName("Zaehler") -> AsInteger

    aber was steht dann dort für ein wert drin?
    1 wenn es existiert und 0 wenn nicht?



  • Außerdem habe ich noch diese frage:
    in der StringVariablen ITEM steht bei mir jetzt der dateiname.
    Wie bringe ich diesen in die select anweisung.

    Query1 -> SQL -> Add ("select count(*) as Zaehler from vapbitmap where bmp_name = ITEM ");

    so wird es ja kaum funktionieren...???

    Bj



  • Bj schrieb:

    dann eben so:
    Datentyp BLABLA = Query1 -> FieldByName("Zaehler") -> AsInteger

    aber was steht dann dort für ein wert drin?
    1 wenn es existiert und 0 wenn nicht?

    weist du denn nicht was count auf englisch bedeutet: Zählen, Anzahl

    count zählt die datensätze in der db-tabelle die deiner WHERE klausel entsprechen



  • In Count bzw. dem Aliasnamen Zaehler steht dann die Anzahl der Datensätze dir er abhängig von deiner Selectanweisung gefunden hat.

    Also wenn die Datei in der DB nicht vorhanden ist steht 0 drin.
    Findet er 5.. steht 5 drin.. usw. 🙂



  • klar, stimmt, sorry.
    manches ist so logisch aber trotzdem.... naja. anfänger eben.
    thx
    Bj



  • Query1 -> SQL -> Add ("select count(*) as Zaehler from vapbitmap where bmp_name = ITEM ");

    dies ist eine stringvariable.
    funktioniert das so?

    frage deshalb, weil das programm zwar startet, aber es gibt eine exception, "allgemeiner SQL Fehler".......



  • strings in den sql anweisungen werden in ' euingeschlossen.

    select * from tabelle where feld='wert'



  • also, es gibt immernoch eine exception:
    Allgem. SQL Fehler: 'Unexpected end of commad'
    weiß jemand was man dann falsch gemacht hat?

    hier mein bisheriger code:

    for(int i = 0; i < FileList->Count; i++)
      {
        Application->ProcessMessages();
        Item = (pFiledata)FileList->Items[i];
        Query1 -> SQL -> Clear();
        Query1 -> SQL -> Add ("select count(*) as Zaehler from vapbitmap where     
                                               bmp_name = 'Item'");
        Query1 -> Open();
        int exists = Query1 -> FieldByName ("Zaehler") -> AsInteger;
        if (exists < 1)
         ListBox1 -> Items -> Add (Item->Name);
      }
    

    Was stimtm denn dort noch nicht?
    thx
    Bj



  • ich habe

    Query1->Active = true;
    

    jetzt mal aus dem ode rausgenommen.
    dann funzt es, zwar nicht richtig, aber wenigsten ohne exception.
    was ist denn daran falsch?

    Könnte mir jemand des SQL Befehl verraten, wie man nicht nach dem ganzen Namen suchen kann, sonder nur ein Teil des namens sucht, er er dann alle Namen ausspcukt, indem dieses 'Wort' vorkommt?

    thx

    Bj



  • Query1->SQL->Add("select count(*) as Zaehler from vapbitmap where bmp_name = 'Item'");
    

    so meinst du es?

    diese anweisung an sich selbst ist richtig.

    aber ..
    1. logisch eine totale katastroffe.

    sie findet kein einzigen eintrag in der tabelle, weil sie nicht nach einem dateinamen sucht sonder nach einem string "Item", was mit deine Item überhaupt nix zu tun hat.

    2. was ist pFiledata? ich nehme mal an, da ist irgendwo dein dateinamen versteckt.

    3. warum machst du immer so viele leerzeichen zwischen?.. 😉


Anmelden zum Antworten