Avatar billede simsen Mester
15. juli 2006 - 09:36 Der er 14 kommentarer og
1 løsning

select med innerjoins

Hejsa

Jeg har en database med følgende tabeller

Kunder (KundeID)
Faktura (KundeID og FakturaID)
Ordre (OdreID og FakturaID)

Nu har jeg så følgende med over i en form: KundeID og FakturaID på en udvalgt kunde og faktura.

Jeg vil hente kundens data (fra Kunder), Faktura informationer (fra Faktura) og de/den tilhørende ordrelinie/r

Min kode ser ud som følgende:

internal void LoadFakturaVis(int KundeID, int FakturaID)
        {
            OleDbConnection minCon = new OleDbConnection();

            minCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\ANSI\\fakturasystem.mdb";

            OleDbCommand minCommand = new OleDbCommand("SELECT * FROM Kunder INNER JOIN Faktura, Ordre ON Kunder.KundeID=Faktura.KundeID, Faktura.FakturaID=Ordre.FakturaNr", minCon);

            minCon.Open();
                OleDbDataReader minReader = minCommand.ExecuteReader();
                txtFakturaNr.Text = minReader["FakturaID"].ToString();
            minCon.Close();
        }

Pkt. 1 - så får jeg følgende fejl, når jeg kører koden:
Syntax error in FROM clause

Pkt. 2 - Skal jeg ikke på en eller anden måde, spørge efter de to ting, jeg har ind - nemlig KundeID og FakturaID (så jeg ved, hvilken kunde og faktura, det drejer sig om)?

mvh

simsen :-)
Avatar billede dr_chaos Nybegynder
15. juli 2006 - 09:41 #1
Prøv med:
SELECT * FROM Kunder K INNER JOIN Faktura F ON F.KundeID = K.KundeID INNER JOIN Ordre O ON O.FakturaNr= F.FakturaID
Avatar billede dr_chaos Nybegynder
15. juli 2006 - 09:42 #2
HVis du skal have en specifik kunde med skal du bruge:

SELECT * FROM Kunder K INNER JOIN Faktura F ON F.KundeID = K.KundeID INNER JOIN Ordre O ON O.FakturaNr= F.FakturaID WHERE K.KundeID=10

Hvis Det er med faktura sa
SELECT * FROM Kunder K INNER JOIN Faktura F ON F.KundeID = K.KundeID INNER JOIN Ordre O ON O.FakturaNr= F.FakturaID WHERE K.KundeID=10 AND F.FakturaID=11
Avatar billede simsen Mester
15. juli 2006 - 10:07 #3
dr chaos

Det er med faktura og jeg har lavet følgende:

OleDbCommand minCommand = new OleDbCommand("SELECT * FROM Kunder K INNER JOIN Faktura F ON F.KundeID = K.KundeID INNER JOIN Ordre O ON O.FakturaNr = F.FakturaID WHERE K.KundeID=1 AND F.FakturaID=1", minCon);

Men får følgende fejl:

Syntax error (missing operator) in query expression

PS: Når jeg så skal hente data - skal jeg så bruge
txtFakturaNr.Text = minReader["FakturaID"].ToString();
eller
txtFakturaNr.Text = minReader["F.FakturaID"].ToString();

mvh
simsen :-)
Avatar billede dr_chaos Nybegynder
15. juli 2006 - 10:21 #4
DU kan benytte
txtFakturaNr.Text = minReader["FakturaID"].ToString(); hvis du henter bestemte felter ud.

prøv lige med

OleDbCommand minCommand = new OleDbCommand("SELECT F.* FROM Kunder K INNER JOIN Faktura F ON F.KundeID = K.KundeID INNER JOIN Ordre O ON O.FakturaNr = F.FakturaID WHERE K.KundeID=1 AND F.FakturaID=1", minCon);
Avatar billede dr_chaos Nybegynder
15. juli 2006 - 10:21 #5
Du kan evt sætte sql commandoen ind i access og teste på den måde
Avatar billede simsen Mester
15. juli 2006 - 10:49 #6
dr chaos

Jeg bliver da helt skør:

Følgende SQL sætning kører jeg i en forespøgsel i Access og får 2 rækker med 2 kolonner ud (som jeg også skal)

SELECT Faktura.FakturaID, Kunder.KundeId
FROM Kunder INNER JOIN (Faktura INNER JOIN Ordre ON Faktura.FakturaID = Ordre.FakturaNr) ON Kunder.KundeId = Faktura.KundeID
WHERE (((Faktura.FakturaID)=1) AND ((Kunder.KundeId)=1));

Følgende SQL sætning kopierer jeg så over i VS og får fejl

OleDbCommand minCommand = new OleDbCommand("SELECT Faktura.FakturaID, Kunder.KundeId FROM Kunder INNER JOIN (Faktura INNER JOIN Ordre ON Faktura.FakturaID = Ordre.FakturaNr) ON Kunder.KundeId = Faktura.KundeID WHERE (((Faktura.FakturaID)=1) AND ((Kunder.KundeId)=1))", minCon);

Fejlen siger:

"No data exists for the row/column"
Avatar billede dr_chaos Nybegynder
15. juli 2006 - 11:11 #7
Hmm prøv lige med en SELECT * FROM Kunde for at se om du har fat i databasen
Avatar billede simsen Mester
15. juli 2006 - 11:22 #8
Der er åbenbart ikke forbindelse til databasen - men det forstår jeg ikke. Jeg kopierer den samme sætning over fra en anden form, hvor den har forbindelse

Kode hvorfra jeg kopierer fra:

OleDbConnection minCon = new OleDbConnection();
            minCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\ANSI\\fakturasystem.mdb";
            OleDbCommand minCommand = new OleDbCommand("INSERT INTO Kunder

Kode som jeg har kopieret til:

OleDbConnection minCon = new OleDbConnection();
            minCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\ANSI\\fakturasystem.mdb";
Avatar billede simsen Mester
15. juli 2006 - 11:22 #9
OleDbCommand minCommand = new OleDbCommand("SELECT * FROM Faktura", minCon);
Avatar billede dr_chaos Nybegynder
15. juli 2006 - 12:07 #10
hvad er stien til databasen ?
Avatar billede dr_chaos Nybegynder
15. juli 2006 - 12:23 #11
altså på din harddisk
Avatar billede simsen Mester
15. juli 2006 - 17:48 #12
Den er c:\ANSI\fakturasystem.mdb
Avatar billede dr_chaos Nybegynder
16. juli 2006 - 10:55 #13
prøv lige at teste din insert på den side du arbejder med.
Avatar billede simsen Mester
16. juli 2006 - 18:56 #14
Hmmmmm - fatter ikke lige hvad der er sket - har skrevet en kommentar, der er forsvundet ud i den blå luft..........

Nå men har fået det til at fungere - tog derefter en select i access og kopierede over, og nu ser det ud til at virke.....

så dr chaos - smid et svar og du får dine velfortjente points og et stort tak herfra

simsen :-)
Avatar billede dr_chaos Nybegynder
17. juli 2006 - 07:24 #15
svar :)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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