Avatar billede disher Nybegynder
25. oktober 2002 - 14:12 Der er 27 kommentarer og
1 løsning

SQL select i C++ Builder 5

Hvordan selecter jeg i to tabeller med én query og får det vist i en DBGrid?

Jeg har prøvet med...

Query1->SQL->Add("SELECT leverandor.navn, vareid,varenavn, pris FROM leverandor,vare WHERE leverandor.leverandorid = vare.leverandorid");

... men får fejl. Men SQL kommandoen virker, hvis man prøver den i MySQLManager!
Avatar billede jpk Nybegynder
25. oktober 2002 - 15:09 #1
Hvorfor så mange point?
Avatar billede disher Nybegynder
25. oktober 2002 - 15:12 #2
Fordi jeg er desperat...
Avatar billede mollmannj Nybegynder
25. oktober 2002 - 19:21 #3
jeg kunne godt bruge pointene, så prøv med en ekstra where sætning!!!
held og lykke med det!!
Avatar billede mickni33 Nybegynder
25. oktober 2002 - 19:25 #4
String ordreNavn;
husk denne Query1->SQL->Clear();
 
 

Query1->SQL->Clear();
    Query1->SQL->Add("select Ordrenavn from Ordretable");
    Query1->Open();
        ordreNavn=Query1->FieldByName("Ordrenavn")->AsString;


Hvis du vil give point så kan jeg godt nøjes med 50
Avatar billede mickni33 Nybegynder
25. oktober 2002 - 19:26 #5
neeej det så lidt dumt ud på skærmen :-)
husk denne Query1->SQL->Clear();

/////////////////////////////////////////////
String ordreNavn;

Query1->SQL->Clear();
    Query1->SQL->Add("select Ordrenavn from Ordretable");
    Query1->Open();
        ordreNavn=Query1->FieldByName("Ordrenavn")->AsString;


Hvis du vil give point så kan jeg godt nøjes med 50
Avatar billede disher Nybegynder
28. oktober 2002 - 08:38 #6
Jeg tror ikke at du helt forstår...
Jeg vil selecte navn fra leverandor OG vareid, varenavn og pris fra vare i én query.
Avatar billede mickni33 Nybegynder
28. oktober 2002 - 08:59 #7
String leverandorStreng;
String varenavnStreng
int prisInteger;
int vareidInteger;

Query1->SQL->Clear();
    Query1->SQL->Add("select leverandor,vareid,varenavn,pris from vare");
    Query1->Open();
        leverandorStreng=Query1->FieldByName("leverandor")->AsString;
        vareidInteger=Query1->FieldByName("vareid")->AsInteger;
        varenavnStreng=Query1->FieldByName("varenavn")->AsString;
        prisInteger=Query1->FieldByName("pris")->AsInteger;

Hvis du klikker en gang på din querycomponent på din form. Så kan du under SQL, i din Object Inspector til venstre på skærmen, indtaste denne  SQL statement. Og ved at sætte din query component til true ligeledes i Object Inspectoren få vist din sql statement i design time
Avatar billede mickni33 Nybegynder
28. oktober 2002 - 09:02 #8
Sorry er lige vågnet :-)
prøv denne sql statement istedet

SELECT L.leverandor,V.vareid,V.varenavn, V.pris FROM leverandor as L,vare as V WHERE L.leverandorid = V.leverandorid");
Avatar billede jpk Nybegynder
28. oktober 2002 - 09:02 #9
Du kan prøve at prefixe alle kolonnenavnene med tabelnavnet:

Query1->SQL->Add("SELECT leverandor.navn, vare.vareid,vare.varenavn, vare.pris FROM leverandor,vare WHERE leverandor.leverandorid = vare.leverandorid");

Men det burde jo egentlig nok virke...
Er du sikker på at det er udførelsen af SQL-sætningen der fejler?
Hvilken fejl får du?
Avatar billede disher Nybegynder
28. oktober 2002 - 09:10 #10
Med begge eksempler...

SELECT L.leverandor,V.vareid,V.varenavn, V.pris FROM leverandor as L,vare as V WHERE L.leverandorid = V.leverandorid");

Query1->SQL->Add("SELECT leverandor.navn, vare.vareid,vare.varenavn, vare.pris FROM leverandor,vare WHERE leverandor.leverandorid = vare.leverandorid");

... får jeg at vide: "Table is read only"
hmm!?
Avatar billede mickni33 Nybegynder
28. oktober 2002 - 09:22 #11
lyder lidt mærkeligt får du laver jo også kun en read;

Har du husket at GRANT'e dine tabeller
Avatar billede disher Nybegynder
28. oktober 2002 - 09:32 #12
?? Det vel kun til access via netværk!?
Det virker jo fint med MySQLManager, men bare ikke i Builder'en!
Avatar billede mickni33 Nybegynder
28. oktober 2002 - 09:40 #13
ææhhØhhh er ikke helt sikker.
Kan den godt compile ?
Avatar billede mickni33 Nybegynder
28. oktober 2002 - 09:41 #14
Den virker i mit eget lille eksempel... Men jeg kører MS Sql server
Avatar billede mickni33 Nybegynder
28. oktober 2002 - 09:43 #15
har du husket denne sætning øverst i din metode
Query1->SQL->Clear();
Avatar billede disher Nybegynder
28. oktober 2002 - 10:27 #16
Ja, den compiler og jeg har Clear'en med!!
Avatar billede mickni33 Nybegynder
28. oktober 2002 - 10:37 #17
Prøv udelukkelsesmetoden
Prøv at select fra kun en tabel

select vareid from vare
og se om det virker

Hvis du kan få det til at virke så gå videre med

select vareid,pris from vare

tilføj lidt ad gangen så er det nemmere at se hvor fejlen opstår
Avatar billede disher Nybegynder
28. oktober 2002 - 10:43 #18
Det virker hvis jeg vælger fra en tabel ad gangen!
Avatar billede mickni33 Nybegynder
28. oktober 2002 - 10:51 #19
leverandor.leverandorid = vare.leverandorid

Så må det næsten være her den fejler

Prøv at trække en post ud.

select vare.pris from vare,leverandor where leverandor.leverandorid='2' and leverandor.leverandorid=vare.leverandorid
Avatar billede mickni33 Nybegynder
28. oktober 2002 - 10:54 #20
kom lige i tanke om at det jo virker i din manager så ....
tror jeg må stå af her.. det lyder lidt mystisk
prøv at vise noget af koden her på eksperten
Avatar billede mickni33 Nybegynder
28. oktober 2002 - 21:08 #21
har du fundet ud af noget?
Avatar billede disher Nybegynder
29. oktober 2002 - 13:18 #22
Desværre ikke :(
Avatar billede disher Nybegynder
30. oktober 2002 - 10:30 #23
Jeg har installeret MyODBC 3.51, som er development release. Kan det mon være grunden til mine problemer? Ville det kunne løses med 2.50, som er stable release!?
Avatar billede mickni33 Nybegynder
30. oktober 2002 - 17:51 #24
tjaaaa
der er ihvertifald ikke noget i vejen med din sql statements og c++ kode
Avatar billede mickni33 Nybegynder
04. november 2002 - 17:16 #25
HVaaaaaaaaad
Nu har jeg samme fejl??????
Hvis man har to tables i sin sql så laver den fejl.
select * from Persontable,Ordretable where Persontable.fornavn='Jensen';

Det kan da ikke være rigtigt at man ikke kan det ?
Har da ellers lavet mange databaseprogrammer i builder, dog et års tid siden sidst, men????
Avatar billede mickni33 Nybegynder
04. november 2002 - 17:25 #26
Ahhhh nu har jeg den
Min Query havde fat i en gammel udgave af min database så jeg fjernede Query1 og min Datasource1 fra min form.
Herefter lagde jeg to nye Query1 og Datasource1 ud på min Form og hæftede min database til min Query1 i objectinspectoren

Så skulle den være der

(Men husk også at tildele(Grant) dine tabeller til den rigtige user.)
Avatar billede soepro Nybegynder
15. november 2002 - 10:29 #27
Jeg bruger næsten konsekvent Text property'en i TQuery komponenten - det er meget nemmere at styre (IMHO):

Query1->SQL->Text = "SELECT leverandor.navn, vare.vareid, vare.varenavn, vare.pris \n" +
                    "FROM leverandor, vare \n" +
                    "WHERE leverandor.leverandorid = vare.leverandorid";

Hvis ellers feltnavne er korrekte, så *SKAL* d.o. fungere. Prøv evt. at lave en hurtig form med en TQuery, TDataSource og TDGGrid komponent - TDataSourcen skal pege på Query1, DBGrid'en til DataSource1. Sæt TQuery'ens 'DataBaseName' til BCDEMOS, og skriv følgende SQL ind i 'SQL' property'en (vha. object inspectoren):

select customer.custno, orders.orderno
from customer, orders
where customer.custno = orders.custno

Går TQuery'en aktiv ved at dobbeltklikke på 'Active' property'en. Hvis du får noget vist i grid'en nu, så er dit BCB sat korrekt op. Prøv derfor så at skifte databasen ud med din MySQL ODBC DSN og skriv overstående SQL i stedet for - det burde altså virke så.
Avatar billede soepro Nybegynder
15. november 2002 - 10:30 #28
SELECT leverandor.navn, vare.vareid, vare.varenavn, vare.pris
FROM leverandor, vare
WHERE leverandor.leverandorid = vare.leverandorid
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