|
[ cula99 @ 09.04.2008. 09:29 ] @
| Programira se u Delphi-ju da ude jasnije. Znam da se ovo može rešiti ako pre poziva insert-a proverim vrednost za IME ali mi treba rešenje preko SQL servera
(COLLATE postoji samo da ga ne pišem):
CREATE TABLE TABLE_A
(ID VARCHAR(50) NOT NULL,
IME NVARCHAR(100) NULL)
insert za tu tabelu
INSERT INTO TABLE_A(ID, IME)
VALUES(:ID, N:IME)
Kada insertu prosledis parametre
'876878', 'čičak' sve je u redu
INSERT INTO TABLE_A(ID, IME)
VALUES('876878', N'čičak')
ali ako kojim slučajem pošalješ:
'879721', NULL javlja grešku
INSERT INTO TABLE_A(ID, IME)
VALUES('879721', NNULL)
Probao sam sa IF
DECLARE @p NVARCHAR(50)
IF :IME IS NULL
SET @p=NULL
ELSE
SET @p=N:IME
u ovom sličaju insert je ovakav:
INSERT INTO TABLE_A(ID, IME)
VALUES(:ID, @p)
tada prijavi grešku, ne može naći colonu sa imenom NNULL
Kako rešiti ovaj problem? |
[ Vic @ 09.04.2008. 09:34 ] @
Kao prvo da li ti je kod atributa ime oznaceno allow nulls? Druga stvar, umesto da u insertu prosledis null, probaj sa '' ili napravi takav insert koji ce u slucaju null vrednosti upisivati samo id.
[ cula99 @ 09.04.2008. 10:02 ] @
Kako misliš atribute označava kao alow nulls? Ne mogu da pravim takve inserte jer imam preko 100 formi na kojima to treba uraditi, a ceo sistem je osmišljen da se insertu šalju parametri.
[ Vic @ 09.04.2008. 10:12 ] @
Nisam dobro pogledao sta si napisao, opcija za allow nulls ti je ukljucena tako da to nije problem. Ovo definitivno radi na MSSQL-u
CREATE TABLE TABLE_A
(ID VARCHAR(50) NOT NULL,
IME NVARCHAR(100) NULL)
INSERT INTO TABLE_A(ID, IME)
VALUES('879721', null)
[ cula99 @ 09.04.2008. 10:24 ] @
Server hoće da uradi ovo kad je :IME = NULL
INSERT INTO TABLE_A(ID, IME)
VALUES('879721', NNULL)
a ovo bas ne radi i pravi probleme
[Ovu poruku je menjao cula99 dana 09.04.2008. u 11:36 GMT+1]
[ DarkMan @ 09.04.2008. 11:20 ] @
A to NNULL bi trebao da bude nesto kao na fazon unicode NULL?
[ cula99 @ 09.04.2008. 11:43 ] @
Kad ubacis ovaj text u komponentu:
INSERT INTO TABLE_A(ID, IME)
VALUES(:ID, N:IME)
ako je IME neki string('čiča') SQL na serveru je ovaj
INSERT INTO TABLE_A(ID, IME)
VALUES(:ID, N'čiča')
u bazu upiše 'čiča'
ako je parametar :IME NULL serveru šalje:
INSERT INTO TABLE_A(ID, IME)
VALUES(:ID, NNULL)
Problem je i u IF-u
ako ga ja pitam
IF nešto
x=5
else
x=y
ako je 'nešto' tacno na x=y ne bi trebalo da se osvrne uopšte
[ Vic @ 09.04.2008. 11:54 ] @
Citat: cula99: Kad ubacis ovaj text u komponentu:
INSERT INTO TABLE_A(ID, IME)
VALUES(:ID, N:IME)
Mislim da te niko bas u potpunosti ne razume. Na pocetku si napisao da se program radi u Delphiju, a ovde koliko vidim imas problem sa SQL-om. Prvo pojasni kako je sve planirano da radi, stored procedure, iz delphi koda.... Kako to gore navedeni tekst ubacujes u komponentu?? Koju komponentu. Mislim ovo je sve jako zbunjujuce, a stvar je kranje prosta i elementarna.
[ DarkMan @ 09.04.2008. 12:02 ] @
NNULL ne postoji u SQL-u i zato ti izbacije gresku.
[ cula99 @ 09.04.2008. 12:35 ] @
1. Postoji TQuery u Delphi-ju:
SELECT ID, IME
FROM TABLE_A
2. Pored toga imas komponentu TQueryUpdate
u TQueryUpdate.InsertSQL je ovaj sql:
INSERT INTO TABLE_A(ID, IME)
VALUES(:ID, N:IME)
3a. Kad hoces da ubacis neki rekord uradis ovo:
TQuery.Insert;
TQuery.ParamByName('ID').AsString := '123456';
TQuery.ParamByName('IME').AsString := 'čiča';
TQuery.Post;
Komponenta TQueryUpdate pošalje ovaj Query:
INSERT INTO TABLE_A(ID, IME)
VALUES( '123456', N'čiča')
na Microsoft SQL Server
3b. Kad hoces da ubacis samo ID rekord uradis ovo:
TQuery.Insert;
TQuery.ParamByName('ID').AsString := '123456';
TQuery.ParamByName('IME').AsString := NULL;
TQuery.Post;
Komponenta TQueryUpdate pošalje ovaj Query:
INSERT INTO TABLE_A(ID, IME)
VALUES( '123456', NNULL)
na Microsoft SQL Server i prijavi grečku
Pitanje je kako zaobići tu grečku, naterati server da u tom slučaju 3b uradi ovo:
INSERT INTO TABLE_A(ID, IME)
VALUES( '123456', NULL)
Ne radim u delphi-ju, nego u programskom rešenju koje je napravljeno u delphi-ju. U njemu se programira slično kao u delphi-ju. U programu postoji komponenta koja sadrži SQL-ove, ima i parametre, po potrebi ih šalje na SQL server(kao u Delphiju).
[ Vic @ 09.04.2008. 12:56 ] @
Citat: DarkMan: NNULL ne postoji u SQL-u i zato ti izbacije gresku.
Ostaje ti da probas da umesto null prosledis ''.
[ DarkMan @ 09.04.2008. 13:22 ] @
Ajd probaj da u TQueryUpdate.InsertSQL ubacis ovaj sql:
Code:
INSERT INTO TABLE_A(ID, IME)
VALUES(:ID, (case when :IME is null then null else N:IME end))
Edit:
Nece moci, opet ce generisati NNULL i izbaciti gresku, probaj:
Code:
INSERT INTO TABLE_A(ID, IME)
VALUES(:ID, convert(nvarchar, :IME) )
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|