Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 11 odgovora
  • 4.846 pregleda

Najnovija ↓

Opet problemi sa unkodom 09.04.2008. u 10:29 · pre 225 meseci #1
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?
Potpis
Čulex
Re: Opet problemi sa unkodom 09.04.2008. u 10:34 · pre 225 meseci #2
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.
Potpis
ERROR974
Re: Opet problemi sa unkodom 09.04.2008. u 11:02 · pre 225 meseci #3
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.
Potpis
Čulex
Re: Opet problemi sa unkodom 09.04.2008. u 11:12 · pre 225 meseci #4
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)
Potpis
ERROR974
Re: Opet problemi sa unkodom 09.04.2008. u 11:24 · pre 225 meseci
izmenjeno 1 put, poslednji put cula99 09.04.2008. u 11:36
  1. cula9909.04.2008. u 11:36zapis iz teksta poruke
#5
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
Potpis
Čulex
Re: Opet problemi sa unkodom 09.04.2008. u 12:20 · pre 225 meseci #6
A to NNULL bi trebao da bude nesto kao na fazon unicode NULL?
Re: Opet problemi sa unkodom 09.04.2008. u 12:43 · pre 225 meseci #7
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
Potpis
Čulex
Re: Opet problemi sa unkodom 09.04.2008. u 12:54 · pre 225 meseci #8
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.
Potpis
ERROR974
Re: Opet problemi sa unkodom 09.04.2008. u 13:35 · pre 225 meseci #10
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).







Potpis
Čulex
Re: Opet problemi sa unkodom 09.04.2008. u 13:56 · pre 225 meseci #11
Citat:
DarkMan: NNULL ne postoji u SQL-u i zato ti izbacije gresku.


Ostaje ti da probas da umesto null prosledis ''.
Potpis
ERROR974
Re: Opet problemi sa unkodom 09.04.2008. u 14:22 · pre 225 meseci #12
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) )
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme