webForumDet fria alternativet

Inner Join Syntax ?

8 svar · 327 visningar · startad av mattiasnordin

mattiasnordinMedlem sedan maj 20012 062 inlägg
#1

I access 97 ställer jag följande fråga och får det svar jag vill ha.

SELECT staffinfo.*, settings_office.*
FROM staffinfo INNER JOIN settings_office ON staffinfo.Office_Id = settings_office.ID
WHERE (((staffinfo.Firstname) Like "jo*"));

Men jag får inte till min fråga på ASP sidan. Tidigare såg frågan ut så här. Hur ser syntaxen ut för INNER JOIN ?

SELECT * FROM staffinfo WHERE Firstname LIKE 'jo%'

Please help me guruwizards!

LarsGMedlem sedan dec. 200012 465 inlägg
#2

Din syntax för inner join är det inget fel på.

Vad är det för problem? Något fel? Inget resultat?

En sak är att om du använder Jet OLE-DB provider så skall du använda % i ditt like-villkor istället för *

mattiasnordinMedlem sedan maj 20012 062 inlägg
#3

Jag får följande fel...

--------------------------------------------------------------------------------
DEBUG: SELECT staffinfo.*, settings_office.* FROM staffinfo INNER JOIN settings_office ON staffinfo.Office_Id = settings_office.ID WHERE (((staffinfo.Firstname) Like "jo%"));
--------------------------------------------------------------------------------
 
Microsoft OLE DB Provider for ODBC Drivers error '80040e10' 

[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1. 

/staffdatabase/redirect_to_page.asp, line 25
LarsGMedlem sedan dec. 200012 465 inlägg
#4

I så fall är det något kolumnnamn som inte stämmer med din tabelldefinition.

mattiasnordinMedlem sedan maj 20012 062 inlägg
#5

Vad kan det då vara?

SELECT staffinfo.*, settings_office.* FROM staffinfo INNER JOIN settings_office ON staffinfo.Office_Id = settings_office.ID

Fungerar. Men när jag lägger till...

WHERE (((staffinfo.Firstname) Like "jo%"));

...så blir det fel. Tabellen heter "staffinfo" och en av kolumnerna heter "Firstname". Jag bör få träff på minst fyra Johan.
Vet inte riktigt vad som är fel. Får fortsätta med trial n error. Är det någon som har någon ide på hur jag felsöker så vet ni var jag bor ;)

mattiasnordinMedlem sedan maj 20012 062 inlägg
#6

Jag trodde att jag hade löst det hela men...

Så fort jag försöker att anväda mig av WHERE så blir det följande fel. Hjälp. Jag hittar verkligen inte ett sätt att gå förbi detta...

SELECT staffinfo.*, settings_office.*, staffinfo.Firstname FROM staffinfo INNER JOIN settings_office ON staffinfo.Office_Id = settings_office.ID WHERE (((staffinfo.Firstname) Like "M*"));

--------------------------------------------------------------------------------
DEBUG: SELECT staffinfo.*, settings_office.*, staffinfo.Firstname FROM staffinfo INNER JOIN settings_office ON staffinfo.Office_Id = settings_office.ID WHERE (((staffinfo.Firstname) Like "M*"));
--------------------------------------------------------------------------------

Microsoft OLE DB Provider for ODBC Drivers error '80040e10'

[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.

/staffdatabase/redirect_to_page.asp, line 25

/staffdatabase/redirect_to_page.asp, line 25 =

set rsStaff = connect.execute(sql)

HILFE....

mattiasnordinMedlem sedan maj 20012 062 inlägg
#7

Dagens utmaning !!!!!!!!!!!!!!!!!!!!!!

Jag blir vansinnig.... Går det i huvudtaget att skriva en fråga som hämtar all information ur två tabeller och slår ihop dessa i en record set? Jag vill välja vilken information som ska hämtas med WHERE i frågan...

Tex hämta allt från tabellerna "staffinfo" & "settings_office" WHERE "Firstname" = Mattias

Det märkliga är att följande fungerar manuellt i access 97.

SELECT staffinfo.Firstname, staffinfo.*, settings_office.* FROM staffinfo INNER JOIN settings_office ON staffinfo.Office_Id = settings_office.ID WHERE (((staffinfo.Firstname) Like "M*"));

Men jag får inte till det på min ASP sida. Det är snudd på att jag ger det alternativa nobelpriset till den som löser mitt problem...

// Mattias

@ndersMedlem sedan juni 200026 914 inlägg
#8

Hur ser din asp-kod ut där du skapar frågan?

Glöm inte detta:

En sak är att om du använder Jet OLE-DB provider så skall du använda % i ditt like-villkor istället för *

Mvh,

mattiasnordinMedlem sedan maj 20012 062 inlägg
#9
<% ' Läser all data ur staffinfo tabellen i staffdatabasen
'***** Skapar Connection-objektet *****'
Set connect = Server.CreateObject("ADODB.Connection")
'***** Specifierar sökvägen *****'
MdbFilePath = Server.MapPath("newstaffdatabase.mdb")
'***** öppnar databasen *****'
Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & MdbFilePath & ";"
'connect är vårt connecton-objekt som har öppnats enligt exempel i länken
		
'hämta sql-fråga från formuläret
varManualSqlQuery=request.querystring("ManualSqlQuery")
if NOT varManualSqlQuery = "" then 
	sql = varManualSqlQuery
	Response.write "<hr>DEBUG SQL query: <font color=red>" &sql &"</font><hr>"
	'skapa recordset
	set rsStaff = connect.execute(sql)
	   if rsStaff.eof then
		rsStaff.close
	   	set rsStaff=nothing
		' Visar nedan om inga träffar i databasen.
		Response.write "<html><SCRIPT Language=JavaScript>alert('INGA TRÄFFAR PÅ:\n\n " &SearchedOnThis &" \n\n I TABELL:\n\n "&SearchedOnThisCategory &" ')</script><body onload=javascript:history.go(-1)></html>" 
	    connect.close
	    set connect=nothing
	   end if
end if 
%>

Jag har ett javascript som bygger en SQLfråga beroende på vad man väljer i ett gränssnitt. Rätt snyggt faktiskt. :p Även smidigt att det går att skriva manuella frågor direkt i formuläret om man inte orkar avnväda gränssnittet. Javascriptet sparar frågan i ett formulär (ManualSqlQuery) som sedan submittas.

Det som genererade felet var ->"<- tecknet ! Byter jag till LIKE 'Jo%' så fungerar det.

SELECT staffinfo.*, settings_office.*, staffinfo.Firstname FROM staffinfo INNER JOIN settings_office ON staffinfo.Office_Id = settings_office.ID WHERE (((staffinfo.Firstname) Like [COLOR=#660000]'[/COLOR]Jo%[COLOR=#660000]'[/COLOR]));

Mattias tackar för hjälpen. Case closed.

Genererad på 374 ms · cache AV · v20260730165559-full.f96bc7eb