/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Sql where clause, hvor betingelse er en va~
Fra : Erik


Dato : 14-11-02 11:40

Hej,

Jeg har et problem med min sql Where clause op mod en access database.

Jeg vil gerne have slettet en række i database ved hjælp af et id, dette id
skal komme fra et brugerinput via en editbox på min form. (Borland 5).

Da jeg ej har fået det til at virke med Edit->Text endnu, starter jeg med i
det mindste at få det til at køre med en variabel, men jeg får denne fejl:

'testQuery: Field 'temp' is of an unknown type' ...

- undrer mig den skriver field, som om temp var noget fra databasen...

----code----
int temp = 2;
ShowMessage(temp) ;

testQuery->SQL->Clear();
testQuery->SQL->Add("DELETE FROM user WHERE id = :temp");
testQuery->ExecSQL();
Edit->Clear();
---code----

- jeg startede med en String og AnsiString mm., men tog så en integer fordi
jeg regnede med at det var et String/AnsiString problem, som jeg har lidt
svært ved at håndtere.

Endvidere ville jeg gerne vide hvordan man kunne skrive typen på en variabel
ud på skærmen for at chekke, i vb kan man jo bruge "typename(temp)", hvilket
kan være en god hjælp, der må være et alternativ i C++?

Håber nogen kan hjælpe?

nb: Der er fint hul igennem til DB´en , når jeg opretter, updater, deleter
uden brug af variabler, så der er der ikke noget at komme efter mht. sql,
table, query komponenterne.

Med venlig hilsen

Erik




 
 
SUNSITE (14-11-2002)
Kommentar
Fra : SUNSITE


Dato : 14-11-02 16:51


"Erik" <kire100@ofir.dk> skrev i en meddelelse
news:3dd379fe$0$784$ba624c82@nntp03.dk.telia.net...
> Hej,
>
> ----code----
> int temp = 2;
> ShowMessage(temp) ;
>
> testQuery->SQL->Clear();
> testQuery->SQL->Add("DELETE FROM user WHERE id = :temp");
> testQuery->ExecSQL();
> Edit->Clear();
> ---code----
>

Jeg tror du mangler at *sætte* din variabel:

testQuery->ParamByName("temp")->AsInteger = temp;

(indsær linien ind før din ExecSQL();)


/B



Erik (14-11-2002)
Kommentar
Fra : Erik


Dato : 14-11-02 17:17


hmmm. det hjalp i hvertfald på den fejl, mange tak for det

Nu siger den dog at der er for få parametre (expectet 2), det kan jeg ikke
lige se, men nu er jeg da kommet videre - herligt!

/Erik

"SUNSITE" <na@na.net> wrote in message news:ar0gp8$m7$1@sunsite.dk...
>
> "Erik" <kire100@ofir.dk> skrev i en meddelelse
> news:3dd379fe$0$784$ba624c82@nntp03.dk.telia.net...
> > Hej,
> >
> > ----code----
> > int temp = 2;
> > ShowMessage(temp) ;
> >
> > testQuery->SQL->Clear();
> > testQuery->SQL->Add("DELETE FROM user WHERE id = :temp");
> > testQuery->ExecSQL();
> > Edit->Clear();
> > ---code----
> >
>
> Jeg tror du mangler at *sætte* din variabel:
>
> testQuery->ParamByName("temp")->AsInteger = temp;
>
> (indsær linien ind før din ExecSQL();)
>
>
> /B
>
>



Erik (14-11-2002)
Kommentar
Fra : Erik


Dato : 14-11-02 17:38

Nej, det hjalp helt! , den sidste del skyldtes tumpen her, der havde lavet
en anslagsfejl!

Jeg er meget taknemmelig.

Men, jeg tillader mig lige at spørge dig om en ting mere, når du nu lige kan
ryste det andet ud af posen og det virker.

Jeg vil gerne have vist alle oplysningerne fra en given tabel i en DBgrid.
Jeg har sat navne for tabellerne i en combobox - brugeren vælger og via en
if - sætning sættes en variable = med det navn jeg skal bruge til DBgridens
datasource.

Problemet er at jeg ikke bare kan sætte:

DBGrid->DataSource = mydatasource;

ERROR:
[C++ Error] main.cpp(200): E2034 Cannot convert 'AnsiString' to 'TDataSource


- AnsiString og String er i det hele taget noget der volder mig lidt
problemer, har du et bud på ovenstående?, har du endvidere et tip (evt.
link) til noget der kan gøre en klog på dette AnsiString/String/convert
problem?

Med venlig hilsen

Erik


"Erik" <kire100@ofir.dk> wrote in message
news:3dd3c8fc$0$793$ba624c82@nntp03.dk.telia.net...
>
> hmmm. det hjalp i hvertfald på den fejl, mange tak for det
>
> Nu siger den dog at der er for få parametre (expectet 2), det kan jeg ikke
> lige se, men nu er jeg da kommet videre - herligt!
>
> /Erik
>
> "SUNSITE" <na@na.net> wrote in message news:ar0gp8$m7$1@sunsite.dk...
> >
> > "Erik" <kire100@ofir.dk> skrev i en meddelelse
> > news:3dd379fe$0$784$ba624c82@nntp03.dk.telia.net...
> > > Hej,
> > >
> > > ----code----
> > > int temp = 2;
> > > ShowMessage(temp) ;
> > >
> > > testQuery->SQL->Clear();
> > > testQuery->SQL->Add("DELETE FROM user WHERE id = :temp");
> > > testQuery->ExecSQL();
> > > Edit->Clear();
> > > ---code----
> > >
> >
> > Jeg tror du mangler at *sætte* din variabel:
> >
> > testQuery->ParamByName("temp")->AsInteger = temp;
> >
> > (indsær linien ind før din ExecSQL();)
> >
> >
> > /B
> >
> >
>
>



Ivan Johansen (14-11-2002)
Kommentar
Fra : Ivan Johansen


Dato : 14-11-02 19:42

Erik wrote:
> DBGrid->DataSource = mydatasource;
>
> ERROR:
> [C++ Error] main.cpp(200): E2034 Cannot convert 'AnsiString' to 'TDataSource

Jeg kender ikke så meget til databaser i BCB, men det ser ud til at du
forsøger at tildele en AnsiString til en TDataSource. Det kan du
selvfølgelig ikke, men prøv at slå TDataSource op i hjælpen og se hvad
du kan gøre med den.

> - AnsiString og String er i det hele taget noget der volder mig lidt
> problemer, har du et bud på ovenstående?, har du endvidere et tip (evt.
> link) til noget der kan gøre en klog på dette AnsiString/String/convert
> problem?

String er en typedef for AnsiString. De er det samme. AnsiString er en
klasse Borland har opfundet, der er binær kompatibel med den tilsvarende
indbyggede type i Delphi.

std::string er derimod er klasse defineret i C++ standarden og kan
derfor bruges i alle C++ kompilere. Du kan konvertere mellem std::string
og AnsiString ved at bruge char* som mellemvej.

//Konvertering af std::string til AnsiString
std::string Str1("Hello world");
AnsiString Str2(Str1.c_str());

//Konvertering af AnsiString til std::string
AnsiString Str3("Hello world");
std::string str4(str3.c_str());


Jeg håber det hjalp på forståelsen.

Ivan Johansen


Erik (14-11-2002)
Kommentar
Fra : Erik


Dato : 14-11-02 21:05


Det hjalp jo, mange tak for forklaringen



"Ivan Johansen" <NG@Padowan.dk> wrote in message
news:3DD3EE69.20605@Padowan.dk...
> Erik wrote:
> > DBGrid->DataSource = mydatasource;
> >
> > ERROR:
> > [C++ Error] main.cpp(200): E2034 Cannot convert 'AnsiString' to
'TDataSource
>
> Jeg kender ikke så meget til databaser i BCB, men det ser ud til at du
> forsøger at tildele en AnsiString til en TDataSource. Det kan du
> selvfølgelig ikke, men prøv at slå TDataSource op i hjælpen og se hvad
> du kan gøre med den.
>
> > - AnsiString og String er i det hele taget noget der volder mig lidt
> > problemer, har du et bud på ovenstående?, har du endvidere et tip (evt.
> > link) til noget der kan gøre en klog på dette AnsiString/String/convert
> > problem?
>
> String er en typedef for AnsiString. De er det samme. AnsiString er en
> klasse Borland har opfundet, der er binær kompatibel med den tilsvarende
> indbyggede type i Delphi.
>
> std::string er derimod er klasse defineret i C++ standarden og kan
> derfor bruges i alle C++ kompilere. Du kan konvertere mellem std::string
> og AnsiString ved at bruge char* som mellemvej.
>
> //Konvertering af std::string til AnsiString
> std::string Str1("Hello world");
> AnsiString Str2(Str1.c_str());
>
> //Konvertering af AnsiString til std::string
> AnsiString Str3("Hello world");
> std::string str4(str3.c_str());
>
>
> Jeg håber det hjalp på forståelsen.
>
> Ivan Johansen
>



B (14-11-2002)
Kommentar
Fra : B


Dato : 14-11-02 22:47

"Erik" <kire100@ofir.dk> skrev i en meddelelse
news:3dd3cdec$0$816$ba624c82@nntp03.dk.telia.net...
> Nej, det hjalp helt! , den sidste del skyldtes tumpen her, der havde lavet
> en anslagsfejl!
>
> Jeg er meget taknemmelig.
>
> Men, jeg tillader mig lige at spørge dig om en ting mere, når du nu lige
kan
> ryste det andet ud af posen og det virker.
>
> Jeg vil gerne have vist alle oplysningerne fra en given tabel i en DBgrid.
> Jeg har sat navne for tabellerne i en combobox - brugeren vælger og via en
> if - sætning sættes en variable = med det navn jeg skal bruge til
DBgridens
> datasource.
>
> Problemet er at jeg ikke bare kan sætte:
>
> DBGrid->DataSource = mydatasource;
>
> ERROR:
> [C++ Error] main.cpp(200): E2034 Cannot convert 'AnsiString' to
'TDataSource
>
>
> - AnsiString og String er i det hele taget noget der volder mig lidt
> problemer, har du et bud på ovenstående?, har du endvidere et tip (evt.
> link) til noget der kan gøre en klog på dette AnsiString/String/convert
> problem?
>
> Med venlig hilsen
>
> Erik


Det var så lidt

Nu er jeg selv ny når vi snakker databaser i BCB... Men når du skal sætte
hvilken table du vil vise i DBGrid, så ville jeg nok kigge på
Database-komponenten. Hvis du *hooker* op via den kan du sætte din table
der.
Hvis du bruger en Table-komponent kan du også sætte hvilken table der skal
vises der.

DBGrid er jo bare connected sammen med en DataSource, som er connected
sammen med et DataSet, som derefter er connected til enten en Table- eller
Database-komponent.

Det med AnsiString/String har du fået svar på kan jeg se. Det er ligesom med
så meget andet, man bliver ikke enige om en *standard* eller *format*- hvis
man kan kalde det for det?
Der skal man holde tungen lige i munden når der skal konverteres - men
compileren skal nok fortælle hvis du glemmer det

/B




Erik (15-11-2002)
Kommentar
Fra : Erik


Dato : 15-11-02 11:08


hmmm. mit sidste svar kom vist aldrig, jeg syntes ikke rigtig jeg styrer
noget p.t., men det var også lige meget, dukker det frem, undskylder jeg
hvis jeg spilder folks tid.

Uanset hvad, jeg skal ikke tage andres tid med mere om dette emne, for jeg
tror faktisk at det der med at sætte datasource = variabel er en fejl, i
stedet skal jeg jo sætte det = med det komponent der kalder den tabel jeg
skal bruge, det er jo det med de komponenter som du har snakket om og som
jeg burde have tænkt på og det er skam også sådan jeg har sat det op.

Jeg tror det kører jeg kan bare ikke få nogle af DB-kontrollerne til at
updatere sig efter udførelsen af min kode og uden updatering kan det jo være
lige meget, for så kan jeg ej se om det virker. Her er jeg totalt i blinde,
for når

->Repaint()
->Refresh()
->Update()

(muligvis forkert skrevet oven over, men de er ok, de vælges jo blot)

ovenstående ej virker, hvad i alverden skal man så gøre og så er det vist
slut med det emne .

mvh.

jens



"B" <na@na.net> wrote in message news:ar15kp$64i$1@sunsite.dk...
> "Erik" <kire100@ofir.dk> skrev i en meddelelse
> news:3dd3cdec$0$816$ba624c82@nntp03.dk.telia.net...
> > Nej, det hjalp helt! , den sidste del skyldtes tumpen her, der havde
lavet
> > en anslagsfejl!
> >
> > Jeg er meget taknemmelig.
> >
> > Men, jeg tillader mig lige at spørge dig om en ting mere, når du nu lige
> kan
> > ryste det andet ud af posen og det virker.
> >
> > Jeg vil gerne have vist alle oplysningerne fra en given tabel i en
DBgrid.
> > Jeg har sat navne for tabellerne i en combobox - brugeren vælger og via
en
> > if - sætning sættes en variable = med det navn jeg skal bruge til
> DBgridens
> > datasource.
> >
> > Problemet er at jeg ikke bare kan sætte:
> >
> > DBGrid->DataSource = mydatasource;
> >
> > ERROR:
> > [C++ Error] main.cpp(200): E2034 Cannot convert 'AnsiString' to
> 'TDataSource
> >
> >
> > - AnsiString og String er i det hele taget noget der volder mig lidt
> > problemer, har du et bud på ovenstående?, har du endvidere et tip (evt.
> > link) til noget der kan gøre en klog på dette AnsiString/String/convert
> > problem?
> >
> > Med venlig hilsen
> >
> > Erik
>
>
> Det var så lidt
>
> Nu er jeg selv ny når vi snakker databaser i BCB... Men når du skal sætte
> hvilken table du vil vise i DBGrid, så ville jeg nok kigge på
> Database-komponenten. Hvis du *hooker* op via den kan du sætte din table
> der.
> Hvis du bruger en Table-komponent kan du også sætte hvilken table der skal
> vises der.
>
> DBGrid er jo bare connected sammen med en DataSource, som er connected
> sammen med et DataSet, som derefter er connected til enten en Table- eller
> Database-komponent.
>
> Det med AnsiString/String har du fået svar på kan jeg se. Det er ligesom
med
> så meget andet, man bliver ikke enige om en *standard* eller *format*-
hvis
> man kan kalde det for det?
> Der skal man holde tungen lige i munden når der skal konverteres - men
> compileren skal nok fortælle hvis du glemmer det
>
> /B
>
>
>



B (15-11-2002)
Kommentar
Fra : B


Dato : 15-11-02 13:20

"Erik" <kire100@ofir.dk> skrev i en meddelelse
news:3dd4c3fe$0$784$ba624c82@nntp03.dk.telia.net...
>
> hmmm. mit sidste svar kom vist aldrig, jeg syntes ikke rigtig jeg styrer
> noget p.t., men det var også lige meget, dukker det frem, undskylder jeg
> hvis jeg spilder folks tid.
>
> Uanset hvad, jeg skal ikke tage andres tid med mere om dette emne, for jeg
> tror faktisk at det der med at sætte datasource = variabel er en fejl, i
> stedet skal jeg jo sætte det = med det komponent der kalder den tabel jeg
> skal bruge, det er jo det med de komponenter som du har snakket om og som
> jeg burde have tænkt på og det er skam også sådan jeg har sat det op.
>
> Jeg tror det kører jeg kan bare ikke få nogle af DB-kontrollerne til at
> updatere sig efter udførelsen af min kode og uden updatering kan det jo
være
> lige meget, for så kan jeg ej se om det virker. Her er jeg totalt i
blinde,
> for når
>
> ->Repaint()
> ->Refresh()
> ->Update()
>
> (muligvis forkert skrevet oven over, men de er ok, de vælges jo blot)
>
> ovenstående ej virker, hvad i alverden skal man så gøre og så er det vist
> slut med det emne .
>
> mvh.
>
> jens


Hej

Jeg giver dig ret i at det kan være tricky.

Hvis jeg forstår dig ret, så kan du ikke se data i f.eks. din
DBGrid-komponent når du er i design-mode (udvikler på projektet) - og det
vil du gerne?.
Har du set efter om dine database-komponenter er sat til active. Propertien
Active skal være = true i din Object Inspector ved de forskellige
komponenter.
Så kan du se data fra databasen i dine komponenter i design-mode.

Det med datasource = variabel holder nemlig ikke - det har du ret i. Som jeg
skrev igår skal du kigge på enten din Table- eller Database-komponent når du
vil ændre i runtime-mode.

Jeg kan fortælle dig at jeg har kun kigget på databaser i BCB i 4 uger - de
to første uger gik med at finde udaf hvordan BDE, Database, Tables,
Datasources osv. osv. skulle hænge sammen.
Når man har fat i den røde tråd går det hurtigt med alt det andet. Jeg må
indrømme at databasetilgang i BCB er utroligt hurtigt og let.

/B




Erik (15-11-2002)
Kommentar
Fra : Erik


Dato : 15-11-02 17:18


Hej igen,

Design time er ikke mit problem nej. Jeg snakker kun run-time.

Problemet var at efter jeg havde sat DBGrid = en ny tabel ville den ikke
update ved brug af (repaint, update eller whatever).

Jeg har dog fundet ud af at sætter jeg DBGrid´s datasource i
object-inspektoren til en tabel i starten , så kan jeg skifte tabeller under
run-time og den updateres selv (troede der skulle repaint el...... til ).

Så man kan sige problemet er løst.

Tilbage står jeg med en irriteret føelse over at have en if struktur, med en
lang udførende linien under hver betingelse, fremfor at det lige blev smidt
i en variabel og til sidst blev sat lig

altså som:

DBGrid->DataSource = valg; (meget mere enkelt og overskuelig kode).



Her er det jeg har måttet lave (vil nok lave switch, men den er ej så glad
for betingelse - detalje......)

---min nuværende virkbare kode, hvor bruger vælger ønsket tabel til syn i
DBgrid via combobox---


if ((ComboBox->Items->Strings[ComboBox->ItemIndex]) == "tabelA")
{

DBGrid->DataSource = tabelADataSource;

}
else if ((ComboBox->Items->Strings[ComboBox->ItemIndex]) == "tabelB")
{

DBGrid->DataSource = tabelBDataSource;
}

else {
ShowMessage("tabel findes ej");
}



- at gentage DBGrid->DataSource = tabelADataSource; - hver gang syntes jeg
er overkill, det er det jeg hader ved C++, I VB er der ikke så mange
restriktioner over sådan noget.... Ok C++ er sproget hvor man kan alt, og
hver dag lærer man mere af dette store mastersprog...suk..


/Erik

"B" <na@na.net> wrote in message news:ar2oql$cj8$1@sunsite.dk...
> "Erik" <kire100@ofir.dk> skrev i en meddelelse
> news:3dd4c3fe$0$784$ba624c82@nntp03.dk.telia.net...
> >
> > hmmm. mit sidste svar kom vist aldrig, jeg syntes ikke rigtig jeg styrer
> > noget p.t., men det var også lige meget, dukker det frem, undskylder jeg
> > hvis jeg spilder folks tid.
> >
> > Uanset hvad, jeg skal ikke tage andres tid med mere om dette emne, for
jeg
> > tror faktisk at det der med at sætte datasource = variabel er en fejl, i
> > stedet skal jeg jo sætte det = med det komponent der kalder den tabel
jeg
> > skal bruge, det er jo det med de komponenter som du har snakket om og
som
> > jeg burde have tænkt på og det er skam også sådan jeg har sat det op.
> >
> > Jeg tror det kører jeg kan bare ikke få nogle af DB-kontrollerne til at
> > updatere sig efter udførelsen af min kode og uden updatering kan det jo
> være
> > lige meget, for så kan jeg ej se om det virker. Her er jeg totalt i
> blinde,
> > for når
> >
> > ->Repaint()
> > ->Refresh()
> > ->Update()
> >
> > (muligvis forkert skrevet oven over, men de er ok, de vælges jo blot)
> >
> > ovenstående ej virker, hvad i alverden skal man så gøre og så er det
vist
> > slut med det emne .
> >
> > mvh.
> >
> > jens
>
>
> Hej
>
> Jeg giver dig ret i at det kan være tricky.
>
> Hvis jeg forstår dig ret, så kan du ikke se data i f.eks. din
> DBGrid-komponent når du er i design-mode (udvikler på projektet) - og det
> vil du gerne?.
> Har du set efter om dine database-komponenter er sat til active.
Propertien
> Active skal være = true i din Object Inspector ved de forskellige
> komponenter.
> Så kan du se data fra databasen i dine komponenter i design-mode.
>
> Det med datasource = variabel holder nemlig ikke - det har du ret i. Som
jeg
> skrev igår skal du kigge på enten din Table- eller Database-komponent når
du
> vil ændre i runtime-mode.
>
> Jeg kan fortælle dig at jeg har kun kigget på databaser i BCB i 4 uger -
de
> to første uger gik med at finde udaf hvordan BDE, Database, Tables,
> Datasources osv. osv. skulle hænge sammen.
> Når man har fat i den røde tråd går det hurtigt med alt det andet. Jeg må
> indrømme at databasetilgang i BCB er utroligt hurtigt og let.
>
> /B
>
>
>



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste