FileExists -> Anwendbar auf Tabelle?



  • 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?.. 😉



  • P.S. wenn du Open() sagst, muss du auch Close() sagen...



  • @ Xqgene

    1.) eben, nach dem string "Item" soll er ja nicht suchen, sondern nach dem variablen inhalt der stringvariable ITEM!

    aber wie teile ich das der SQL anweisung mit?

    2.) richtig.

    3.) weil ich das übersichtlicher finde 😉

    ich habe also noch 2 probleme.
    ich möchte nach dem inhalt des strings ITEM suchen.
    und ich würde gerne, das deren inhalt nicht dem EXAKTEN dateinamen der tabelle entsprechen muß, sondern einfach nur ein teil des namens sein muss, um ihn zu finden.

    kannst du mir weiterhelfen?

    thx
    Bj



  • Bj schrieb:

    ich möchte nach dem inhalt des strings ITEM suchen.
    und ich würde gerne, das deren inhalt nicht dem EXAKTEN dateinamen der tabelle entsprechen muß, sondern einfach nur ein teil des namens sein muss, um ihn zu finden.

    String SQL = "select * from blabla where blublu LIKE '%" + String(Item->Iregndwo_versteckter_name) + "%'";
    Query1->SQL->Add(SQL);
    

    und um deine weitere frage zu vermeiden:

    LIKE
    Bestimmt, ob die angegebene Zeichenfolge einem angegebenen Muster entspricht. Ein Muster kann normale Zeichen und Platzhalterzeichen einschließen. Bei einem Mustervergleich müssen normale Zeichen exakt mit den angegebenen Zeichen in der Zeichenfolge übereinstimmen. Platzhalterzeichen können jedoch mit beliebigen Teilen der Zeichenfolge übereinstimmen...



  • gut, und naja, jetzt gibt es keinen zähler mehr.
    kann ich diesen mit count wieder einfach einbauen , ja?
    weil du hast ihn weggelassen (ohne grund?!)

    habe es einfach mal eingebaut, und mein code sieht jetzt wie folgt aus:

    Query1 -> SQL -> Add ("select count(*) as Zaehler from vapbitmap where   
                         bmp_name LIKE '%" + String(Item->Name) + "%'");
        Query1 -> Open();
        int exists = Query1 -> FieldByName ("Zaehler") -> AsInteger;
        if (exists < 1)
        ListBox1 -> Items -> Add (Item->Name);
    

    trotzdem findet er wieder keine einzige übereinstimmung! 😡
    thx
    Bj


Anmelden zum Antworten