Avatar billede trold Nybegynder
19. november 2000 - 14:26 Der er 1 kommentar og
3 løsninger

Borland Builder, Select Query

Jeg har store problemer med at få et select statement til at virke på en form i Borland Builder 3.0, når jeg sætter en where clause på,

undlader jeg where clausen kører programmet perfekt,

Hvis where clausen er med - går exe filen i stå, når jeg kalder mit query, programmet står med timeglas et par minutter, og dernæst program not responding

Kildekoden ser således ud

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include \"AmbulanceSendtreg.h\"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource \"*.dfm\"
TFormAmbulanceSendtreg *FormAmbulanceSendtreg;
//---------------------------------------------------------------------------
__fastcall TFormAmbulanceSendtreg::TFormAmbulanceSendtreg(TComponent* Owner)
    : TForm(Owner)
{

}
//---------------------------------------------------------------------------

void __fastcall TFormAmbulanceSendtreg::FormActivate(TObject *Sender)
{
strStationsName = FormRekvisitionafAmbulance->EditStationsNavn->Text;
LabelStationName->Caption = strStationsName;

Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add(\"Select * from AMBULANCE \");
//Query1->SQL->Add(\"WHERE (Hjemstation = \'\" + strStationsName + \"\') AND (Udrykningsstatus = 0)\");
Query1->Open();

    if (!Query1->RecordCount == 0)
    {
    Query1->First();
    strAmbulanceID = Query1->FieldValues[\"AmbulanceId\"];
    //Query1->FieldValues[\"Udrykningsstatus\"] = 1;
    //Query1->ExecSQL();

   
    Table2->Open();
    Table2->First();
    Table2->Edit();
    while (strAmbulanceID != Table2->FieldValues[\"AmbulanceId\"])
    Next();
    Table2->FieldValues[\"Udrykningsstatus\"] = 1;
    Table2->Refresh();

    Table1->Open();
    Table1->Last();
    Table1->Edit();
    Table1->FieldValues[\"AmbulanceNr\"] = strAmbulanceID;
    Table1->FieldValues[\"UdrykningsStation\"] = strStationsName;
    Table1->Refresh();

    //LabelTest->Caption = \"Ambulance Nr: \" + strAmbulanceID + \" På vej til Ulykkestedet\";
    LabelTest->Caption = \"Fundet \" + strAmbulanceID;
    ListBoxStationsNavn->Visible = false;
    //}

    //else
    //{
    //Query1->Close();
    //Query1->SQL->Clear();
    //Query1->SQL->Add(\"Select * from AMBULANCE \");
    /*
    Query1->SQL->Add(\"WHERE Udrykningsstatus = 0\");
    Query1->Open();
    Query1->First();

    while (!Query1->Eof)
      {
    ListBoxStationsNavn->Items->Add(Query1->FieldValues[\"Hjemstation\"]);
    Query1->Next();
      }
    */
    }

}




//---------------------------------------------------------------------------

Det der driller er

//Query1->SQL->Add(\"WHERE (Hjemstation = \'\" + strStationsName + \"\') AND (Udrykningsstatus = 0)\");


Avatar billede lbs Nybegynder
19. november 2000 - 18:05 #1
Problemet er sikkert at du ikke tjekker på om der kommer nogen værdi retur fra databasen.


Når du så tilføjer din where clause, så duer det ikke fordi du ikke får nogen rækker retur..
eller måske fordi du ikke får nok..
såvidt jeg kan se er der intet tjek på om du får 0 værdier ud
Avatar billede hirtshals Nybegynder
20. november 2000 - 08:21 #2
prøv at bruge small caps i din where clause

Query1->SQL->Add(\"where (Hjemstation = \'\" + strStationsName + \"\') and (Udrykningsstatus = 0)\");

Ellers er der ikke noget i vejen med din query så
Jeg tror problemet er et andet sted

Prøv evt. at tage et skridt af gangen f.eks udkommentere alt i din if / else - på nær en tekst der skriver fundet eller ikke fundet


Avatar billede trold Nybegynder
20. november 2000 - 18:24 #3
hirtshals >> Jeg brugte din fremgangs måde med small caps - og et skridt af gangen, og kommer nu ind i enten if eller else, det ser ud som om det er Table2 der driller,

Derfor har jeg istedet forsøgt med en ny SQL control

//Query2->Close();
    Query2->SQL->Clear();
    //Query2->Open();
    Query2->First();
    Query2->SQL->Add(\"update AMBULANCE set Udrykningsstatus = 1\");
    Query2->SQL->Add(\"where AmbulanceId = \'\" + strAmbulanceID + \"\'\");
    Query2->ExecSQL();

Men det vil heller ikke virke

lbs og hirtshals i får lidt points og så laver jeg et nyt spm
Avatar billede soepro Nybegynder
21. november 2000 - 15:59 #4
Dit problem er simpelthen dine \"delimiters\" i

Query2->SQL->Add(\"where AmbulanceId = \'\" + strAmbulanceID + \"\'\");

fordi under C++ skal du skrive \\\' for at få en enkelt \"pling\" i den dannede streng - ellers får du hældt noget \"gnyff\" i strengen. Prøv at rette til:

Query2->SQL->Add(\"where AmbulanceId = \\\'\" + strAmbulanceID + \"\\\'\");
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester