newbie frage | abfrage von 2 tabellen

engelolli

Grünschnabel
hallo,
ich bin noch ganz frisch in asp und habe eine (ich denke) einfache frage...
ich habe in einer access DB 2 tabellen.
eine "Auftrag" und eine "Personen".
in der "Auftrag" wird nur eine ID für die person abgelegt.
der rest steht in "Personen".
jetzt möchte ich alle auftträge anzeigen lassen mit den personen namen.
das erste klappt auf wunderbar (siehe code), nur wie kann ich jetzt anstelle der peronen-id den namen der person raussuchen und den anzeigen ?
gruß, oliver

PHP:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!--#include file="Connections/yellow_folder.asp" -->
<%
Dim rs_test1
Dim rs_test1_numRows
Dim MM_yellow_folder_STRING

MM_yellow_folder_STRING = "dsn=yellow_folder;"

Set rs_test1 = Server.CreateObject("ADODB.Recordset")
rs_test1.ActiveConnection = MM_yellow_folder_STRING
rs_test1.Source = "SELECT ProjectID, PersonID, Kunde, Verantwortlich, CADSystem FROM Auftrag ORDER BY ProjectID ASC"
rs_test1.CursorType = 0
rs_test1.CursorLocation = 2
rs_test1.LockType = 1
rs_test1.Open()

rs_test1_numRows = 0
%>
<%
Dim Repeat1__numRows
Dim Repeat1__index

Repeat1__numRows = -1
Repeat1__index = 0
rs_test1_numRows = rs_test1_numRows + Repeat1__numRows
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Unbenanntes Dokument</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<table border="1" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td>Project ID </td>
    <td>Person</td>
    <td>Kunde</td>
    <td>Verantwotlich</td>
    <td>CAD-System</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <% 
While ((Repeat1__numRows <> 0) AND (NOT rs_test1.EOF)) 
%>
  <tr>
    <td><%=(rs_test1.Fields.Item("ProjectID").Value)%></td>
    <td><%=(rs_test1.Fields.Item("PersonID").Value)%></td>
    <td><%=(rs_test1.Fields.Item("Kunde").Value)%></td>
    <td><%=(rs_test1.Fields.Item("Verantwortlich").Value)%></td>
    <td><%=(rs_test1.Fields.Item("CADSystem").Value)%></td>
  </tr>
  <% 
  Repeat1__index=Repeat1__index+1
  Repeat1__numRows=Repeat1__numRows-1
  rs_test1.MoveNext()
Wend
%>

</table>
</body>
</html>
<%
rs_test1.Close()
Set rs_test1 = Nothing
%>
 
habe mal folgendes versucht :

PHP:
<%
Dim rs_test2
Dim rs_test2_numRows
Dim person_id

person_id = (rs_test1.Fields.Item("PersonID").Value)

Set rs_test2 = Server.CreateObject("ADODB.Recordset")
rs_test2.ActiveConnection = MM_yellow_folder_STRING
rs_test2.Source = "SELECT Name FROM Person WHERE Name = '" + person_id + "'"
rs_test2.CursorType = 0
rs_test2.CursorLocation = 2
rs_test2.LockType = 1
rs_test2.Open()

rs_test2_numRows = 0
%>
  <tr>
    <td><%=(rs_test1.Fields.Item("ProjectID").Value)%></td>
    <td><%=(rs_test2.Fields.Item("Name").Value)%></td>
    <td><%=(rs_test1.Fields.Item("Kunde").Value)%></td>
    <td><%=(rs_test1.Fields.Item("Verantwortlich").Value)%></td>
    <td><%=(rs_test1.Fields.Item("CADSystem").Value)%></td>
  </tr>
<%
rs_test2.Close()
Set rs_test2 = Nothing
%>

dann kommt aber folgender Fehlertyp:

Laufzeitfehler in Microsoft VBScript (0x800A000D)
Typen unverträglich: '[string: "SELECT Name FROM Per"]'
/yellow_folder/Default.asp, line 63

es muss doch hier einen geben, der mir da mal kurz helfen kann :(
 
Hi

zum einen ist Name ein reserviertes Wort. Du solltest es in [Name] Klammern setzen.

Zum anden gibts da eine Typenunverträglichkeit. Du liest im Feld Name in der Where-Bedingung die Person_ID aus.

richtigerweise müsste diese dann lauten

where Person_ID = " & Person_ID & "...

Vorausgesetzt das Feld in der Tabelle Person heißt Person_ID und es ist vom Type integer, und dann müssen die Hochkomma weg.
 
erst mal danke luzie für die hilfe.
habe das mal so geändert :
PHP:
61 Set rs_test2 = Server.CreateObject("ADODB.Recordset")
62 rs_test2.ActiveConnection = MM_yellow_folder_STRING
63 rs_test2.Source = "SELECT [Name] FROM Person WHERE Rec = " & Person_ID
64 rs_test2.CursorType = 0
65 rs_test2.CursorLocation = 2
66 rs_test2.LockType = 1
67 rs_test2.Open()

jetzt kommt :
Fehlertyp:
Provider (0x80004005)
Unbekannter Fehler
/yellow_folder/Default.asp, line 62

hm, vieleicht versuche ich doch lieber die access DB nach mysql zu konvertieren. in php weiss ich wenigstens was ich tue *lol*

ne, im ernst.
wo ist der bug ? muss ich die connection nicht so erstellen ?

gruß, oliver
 
Hi

sicher benötigst Du eine Connection. Aber ich kenne ja Dein Script nicht. Hast Du die Connection vorher schon mal geschlossen?

Häng doch mal den kompletten Code der Seite als Text-Datei an.
 
hi,

hier hast du die datei.
ich denke nicht, dass ich die conn geschlossen habe.
mein problem wird wohl eher php sein.
da ich das system von asp noch nicht so ganz verstanden habe.
und doch einiges anders ist wie in php (loop im tabellen auzulesen und so).

aber evtl. kannst du mir ja helfen, das ich die ersten schritte jetzt mal schaffe :)

danke aber schon mal für die hilfe !

gruß, oliver
 

Anhänge

  • default.txt
    2,2 KB · Aufrufe: 45
Hallo

solch ein Konstruktion würde auch in php nicht funktionieren.
Du willst einen Wert aus der 2 Abfrage in der Schleife der 1. auslesen. Das funktioniert meines Wissens nicht.

Warum 2 Recordsets? Die Tabellen haben doch scheinbar eine Beziehung zueinander PersonID aus der Tabelle Auftrag und Rec aus der Tabelle Person. Das kannst du doch über den inner join in einem RS unterbringen.

Ich häng Dir mal die Datei an.
Probiers aus. Ist allerdings nicht getestet.
 

Anhänge

  • beispiel.txt
    1,9 KB · Aufrufe: 51
Zuletzt bearbeitet:
Also, wenn ich auf einer Seite mir den Inhalt einer Tabelle anzeigen lasse, und der Inhalt zum Teil auch IDs von anderen Tabellen hat, ich aber nicht die ID, sondern den in der anderen Tabelle Inhalt der ID bekommen will, dann schreib ich dort, wo die ID ist dann nochmal n select statement.

Ergo,
Code:
RSget2nddata = conn.execute("select [name] [wasauchimmerduwillst] from tabelle2 where ID = "& rs_test2.Fields.Item("Name").Value &"")

und dann gibste das ganze aus

Und schon sollte das ganze funktionieren.
 

Neue Beiträge

Zurück