Nu har jeg aldrig prøvet Borlands CBuilder, men strenge er i C normalt pointere, dvs. at det du gør når du prøver \"string 1 != string2\" er at du spørger om string1 og 2 referer til det samme stringobjekt!! - og det du ønsker er jo at tjekke om indholdet af de to strenge er ens. Så AnsiStrComp er sikkert en udmærket ide - prøv noget i retning af: while (AnsiStrComp(strAmbulanceID, Table2->FieldValues[\"AmbulanceId\"]) != 0) Next();
Altså AnsiStrComp returnerer 0 hvis strengene er ens.
Nu har jeg ikke lige adgang til CBuilder-dokumentationen, så ovenstående er ikke testet, men noget i den retning burde virke!!
// på returnVal kan du se om de er ens. // hvis returnVal > 0 er \"et\" den længste streng // hvis returnVal < 0 er \"to\" den længste streng // hvis funktionen returnerer 0 er strengene ens!
Men sådan helt teoretisk... hvorfor bruger du ikke bare en SQL-forespørgsel? SELECT * FROM Tabelnavn WHERE AmbulanceId = \'ditID\'
Ved at køre dit loop laver du jo principielt en sekvenciel søgning, hvilket er fint hvis du har max 100 tupler i din tabel, men hvis det er 100000 som det jo nemt kan blive i større systemer, så bruger man i hvert fald IKKE sekventiel søgning. Databaser har jo inbyggede søgestrukturer, der gør det muligt at søge meget smartere og hurtigere
I C Bilderen findes der ganske udemærkede funktioner til håndtering af den slags ...
Kig på AnsiStrComp, som ligger i SysUtils.hpp Skal del være lidt mere sofisrikeret kan du også bruge CompareMEM ....
strcmp er noget til brug for M$ C++ og ligende fordi de ikke har et ordenligt string begreb. En af C++ Builderens helt store forcer er netop at det er gjort nemt og hurtigt, således du sjældent behøver ar kalde en masse grimme funktioner ....
AnsiString kan nu sagtens sammenlignes med brug af operatoren \'==\'. Din fejl er blot, at du skal angive feltet (fra tabellen) som en AnsiString. Derfor skal din kode se således ud:
while (!strAmbulanceID != Table2->FieldByName(\"AmbulanceId\")->AsString) Next();
1) Duck har ret, du kan sammenligne to AnsiString direkte vha. == operatoren. Værdien af et felt som AnsiString får du ved at bruge ->AsString property\'en. 2) Du har lavet samme fejl som tidligere nævnt i din ADD: Query2->SQL->Add(\"update AMBULANCE set Udrykningsstatus = 1\"); Query2->SQL->Add(\"where AmbulanceId = \\\'\" + strAmbulanceID + \"\\\'\"); altså manglende \\\' på delimiterne.
(Husk på det er stadig en alm. ANSI C streng du angiver som værdi - AnsiString klassen \"oversætter\" dem direkte.)
Synes godt om
Ny brugerNybegynder
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.