Avatar billede plaf Nybegynder
10. oktober 2005 - 14:01 Der er 22 kommentarer og
1 løsning

Data fra 2 tabeller

I tabel 1 har jeg to kolonner: En kolonne med ID og En kolonne med Navn.
I tabel 2 har jeg et antal kolonner svarende til rækkerne i tabel 1.

Eksempel:

Tabel 1:
ID    Navn
-------------
1      Navn 1
2      Navn 2
3      Navn 3

Tabel 2:

1        2        3
------------------------
værdi1  værdi2  værdi3


Ønsket resultat:

Navn 1    Navn 2    Navn 3
-----------------------------
værdi1    værdi 2    værdi3


Det er altså egentlig data fra tabel 2, jeg vil have vist, men med kolonneoverskrifter fra tabel 1.

Hvordan kan jeg gøre det?
Avatar billede perlund Nybegynder
10. oktober 2005 - 14:17 #1
hvad hedder kolonnerne i tabel nr. 2?
Avatar billede perlund Nybegynder
10. oktober 2005 - 14:19 #2
Det bliver noget i stil med: (jeg kender ikke lige dine relationer)

select table1.navn,table2.tekst from table1
inner join table2 on table2.id = table1.xid
Avatar billede plaf Nybegynder
10. oktober 2005 - 14:19 #3
Jamen det er jo det smarte: I tabel hedder kolonnerne IDérne fra tabel 1...

Er temmelig lost. Har kun erfaring med ASP såeh....

/Plaf
Avatar billede perlund Nybegynder
10. oktober 2005 - 14:21 #4
Dvs. du har en en-til-en relation mellem de to tabeller? Hvorfor om jeg må spørge?

Men dit SQL bliver sådan:

select table1.navn,table2.tekst from table1
inner join table2 on table2.id = table1.id
Avatar billede perlund Nybegynder
10. oktober 2005 - 14:25 #5
ahh sorry - jeg misforstod dit post tror jeg. Det var da en sjov struktur
Avatar billede plaf Nybegynder
10. oktober 2005 - 14:25 #6
Ja, grunden kan jeg ikke svare for - laver en net-del til et allerede eksisterende program - så tabellernes opbygning ligger fast.

Når jeg har SQLén...

Hvordan får jeg så vist data med det ønskede resultat: Kolonneoverskrifter fra tabel 1 og indhold fra tabel 2?
Avatar billede perlund Nybegynder
10. oktober 2005 - 14:26 #7
Nej - jeg forstår ikke dit design. Enlighten me..:)
Avatar billede perlund Nybegynder
10. oktober 2005 - 14:30 #8
Vil det sige at du lige så mange kolonner i tabel 2 som rækker i tabel 1??
Avatar billede plaf Nybegynder
10. oktober 2005 - 14:33 #9
Lige præcis: Der er lige så mange kolonner i tabel 2 som rækker i tabel 1!!
Avatar billede perlund Nybegynder
10. oktober 2005 - 14:40 #10
ok - så hvis man skal tilføje rækker til tabel 1 skal man altså redesigne tabel 2 (tilføje nye kolonner).

Det kan du ikke lave noget join på - data er ikke normaliseret. Jeg ville lave db-strukturen om. Men hvis det ikke er muligt, bliver det vel noget med at lave en stored procedure eller sqlfuntion, der tager ID'en og opbygger SQL sætninger runtime.

select tekst,dbo.GetVærdi(ID) from table1. Det er absolut ikke en fed løsning.
Avatar billede plaf Nybegynder
10. oktober 2005 - 14:46 #11
Snøft - lige nu er jeg ikke en gang ude i en fed løsning... jeg vil bare gerne have noget, der virker... hulk.

Kender ikke noget til stored procedures. Hvordan ville du lave det med en sqlfunktion, der tager IDén og opbygger SQL sætninger runtime?

/Plaf
Avatar billede perlund Nybegynder
10. oktober 2005 - 14:49 #12
Er det MS SQL, MySQL, Access...??
Avatar billede plaf Nybegynder
10. oktober 2005 - 14:51 #13
MySQL
Avatar billede perlund Nybegynder
10. oktober 2005 - 14:58 #14
Hvor mange rækker er der i tabel 2?
Avatar billede plaf Nybegynder
10. oktober 2005 - 14:59 #15
Der kan være fra 0 til uendeligt... Afhængigt af hvad brugeren har indtastet...
Avatar billede perlund Nybegynder
10. oktober 2005 - 15:02 #16
Hvad forventer du at få ud?

Alle værdier i den aktuelle kollonne i table2 eller er der et filter til?
Avatar billede perlund Nybegynder
10. oktober 2005 - 15:04 #17
Jeg ville lave ét select på tabel2 og så slå navnet op i table2 fra .net
Avatar billede plaf Nybegynder
10. oktober 2005 - 15:04 #18
Jeg forventer bare at få alle værdierne (evt med paging) ud....
Avatar billede plaf Nybegynder
10. oktober 2005 - 15:05 #19
Noget ala din seneste løsning har jeg lavet i den klassiske asp-version. Men hvordan gør jeg deti .net? - Er jo helt ny udi det her...
Avatar billede -psycho- Nybegynder
10. oktober 2005 - 17:45 #20
Den eneste løsning jeg lige kan komme på vil være at oprette en 3 tabel.. med kolonne navne fra tabel 1. og derefter indsætte dataene fra tabel 2.

Er lidt noget rod, nå men det kan være det her virker aner det ikke..

/********************************************************************/

SqlConnection SQLConn = new SqlConnection("SQL Connect Streng");
       
DataTable Table = new DataTable();

SqlCommand SQLCmd = new SqlCommand("SELECT * FROM table1", SqlConn);

SQLConn.Open();

SqlDataReader SQLReader = SQLCmd.ExecuteReader();

while (SQLReader.Read())
{
  Table.Columns.Add(new DataColumn(SQLReader["Navn"].ToString()));
}

SQLReader.Close();

SQLCmd = new SqlCommand("SELECT * FROM table2", SQLConn);

SQLReader = SQLCmd.ExecuteReader();

while (SQLReader.Read())
{
  object[] Data = new object[SQLReader.FieldCount];

  for (int i = 0; i < SQLReader.FieldCount; i++)
  {
    Data[i] = SQLReader[i].ToString();
  }

  Table.Rows.Add(Data);
}

SQLReader.Close();
SQLConn.Close();
Avatar billede plaf Nybegynder
11. oktober 2005 - 11:01 #21
Har klippet og klistret forskellige steder - og nu er den vist lige ved at være der...

'Put user code to initialize the page here
        Dim oConnection As Odbc.OdbcConnection = New Odbc.OdbcConnection(Application("ConnString"))
        Dim OneCommand, TwoCommand As Odbc.OdbcCommand
        Dim OneDataReader, TwoDataReader As Odbc.OdbcDataReader
        Dim OneSQL As String = "SELECT * FROM Tabel1"
        Dim TwoSQL As String = "SELECT * From Tabel2"
        Dim OneArray(), TwoArray() As String
        Dim F1, F2 As String
        Dim T, U As Integer

        oConnection.Open()
        OneCommand = New Odbc.OdbcCommand(OneSQL, oConnection)
        OneDataReader = OneCommand.ExecuteReader
        While OneDataReader.Read()
            F1 = F1 & " " & CStr(OneDataReader("FeltEtiket")) & ";,,; "
            F2 = F2 & " " & CStr(OneDataReader("FeltNavn")) & ";,,; "
        End While
        oConnection.Close()

        OneArray = Split(F1, ";,,;")
        TwoArray = Split(F2, ";,,;")
        Dim dt As New DataTable

        For T = LBound(OneArray) To UBound(TwoArray)
            'Create the columns
            'Add the columns to the DataTable's Columns collection
            dt.Columns.Add("" & OneArray(T) & "")
        Next

        oConnection.Open()
        TwoCommand = New Odbc.OdbcCommand(TwoSQL, oConnection)
        TwoDataReader = TwoCommand.ExecuteReader
        Dim dr As DataRow
        While TwoDataReader.Read()
            dr = dt.NewRow()
            For U = LBound(OneArray) To UBound(OneArray)
                dr("" & OneArray(U) & "") = CStr(TwoDataReader("" & TwoArray(U) & ""))' HER GÅR DET STADIG GALT
            Next
            dt.Rows.Add(dr)
        End While
        oConnection.Close()

        'Bind the DataTable to the DataGrid
        dgPeople.DataSource = dt
        dgPeople.DataBind()


jeg har dog problemer i den linie, hvor jeg også skriver det går galt...
Hvis jeg i stedet skriver :
dr("" & OneArray(U) & "") = "test"
, så får jeg en fin tabel med rigtige kolonnenavne, men selvfølgelig med teksten "test" i alle celler.

Nogen bud?

/Plaf
Avatar billede plaf Nybegynder
11. oktober 2005 - 11:05 #22
Skulle måske lige nævne, at jeg får følgende fejl:
System.IndexOutOfRangeException: 1

/Plaf
Avatar billede plaf Nybegynder
11. oktober 2005 - 13:22 #23
Problemet er vist et andet nu, så jeg har fortsat spørgsmålet her:
http://exp.dk/spm/655048

/Plaf
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