Fejl i restaurant_add.tcl

greenspun.com : LUSENET : WebdesignII : One Thread

Mit program kan godt finde ud af, at indsætte kommentar det rigtige sted, når jeg skriver et eksisterende restaurantnavn i tekstfeltet, men ikke når jeg skriver et nyt. Så udfører det ikke den sql-kommando, som indsætter en ny række i tabellen Restaurant, og jeg får denne fejlmeddelelse.

Database operation "1row" failed (exception NSINT, "Query did not return a row.") while executing "ns_db 1row $db $sql" (procedure "database_to_tcl_string" line 3) invoked from within "database_to_tcl_string $db $query" invoked from within "set restaurant_id [database_to_tcl_string $db $query] " (file "/web/jj/www/oevelse9/restaurant_add.tcl" line 41) invoked from within "source $file"

Min kode:

set db [ns_db gethandle]

set query "select restaurant_id from Restaurant where restaurant_name = '$restaurant_name'" set selection [ns_db select $db $query]

if {[string compare $selection ""] == 0} { ns_db dml $db "insert into Restaurant (restaurant_id, restaurant_name) values (restaurant_id_sequence.nextval,'$restaurant_name')" }

set query "select restaurant_id from Restaurant where restaurant_name = '$restaurant_name'"

set restaurant_id [database_to_tcl_string $db $query]

-- Joacim Jeppesen (jj@it-c.dk), April 09, 2001

Answers

I stedet for at teste om selection er den tomme streng vil jeg prøve følgende:

set db [ns_db gethandle]

set query "select restaurant_id from Restaurant where restaurant_name = '$restaurant_name'" set selection [ns_db select $db $query]

if {[ns_db getrow $db $selection]} { set_variables_after_query # nu er restaurant_id sat } else { -- bind nyt restaurant_id, ved set q "select restaurant_id_sequence.nextval from dual" set restaurant_id [database_to_tcl_string $db $q] -- indsæt restaurant med det nye restaurant_id

}

# nu er restaurant_id sat, ligemeget hvilken gren der vælges.



-- Niels Hallenberg (nh@it-c.dk), April 09, 2001.

Moderation questions? read the FAQ