DELPI, SQL ja NULL arvot... Tahtoo apua...

Päivää vaan...

Pikku ongelman poikanen. Rassaan siis delphillä tehä yhtä judanssia ja ongelma on nyt seuraavanlainen.

Kuinka saada tietokannan solu takaisin NULL arvoon? Kun siis solussa käy jotain kirjoittamassa tai lisäilemässä, niin kuinka saan sen NULL tilaan takaisin. Tiedän että pelkkä tyhjän syöttäminen ( '' ) ei tosiaan tunnu olevan sama kuin NULL arvo. Käyntän siis ihan perus dbgridiä ja sen muita komponentteja. SQL lauseet on vaan koodattu suoraan koodiin, joten periaatteessa pitäsi olla helppoa, mutta kun...

Jos joku tietäväinen viitsisi kertoa, tiedän että ei ole iso ongelma.. kai..

Kiitoksia

*laulellen martti servon, mikä on kun ei taidot riitä* =)
9466
Äänestä

Muut lukivat myös

Vastaukset 9

Vanhimmat

laittaa siihen vaan päälle?

Delphissä Null ja sql:ssä NULL

'Insert Into "C:\MyTable.db" '
'(DataDate, AcctNO, OrderNo)'
'Values ("' sDataDate '","' sAcctNo '","' Null '") ';

Äänestä
  • En tiedä asiasta mitään mutta jos arvoksi asettaa nul niin arvoksi tulee null. (eli yhden l:n heitto)

    Äänestä

  • Eikös INSERT lisää tietueen eikä kirjoita päälle ?
    Siis täytyy käyttää UPDATEa.

    Eli SQL:ssä menis jotenkin näin:

    UPDATE MyTable SET OrderNo = NULL WHERE AccNO = xxxx

    jossa xxxx = se AccNO jonka tietutetta muutetaan.

    Jos halutaan muuttaa kaikista tietueista niin tietysti koko WHERE pois

    Äänestä

  • Inssi kirjoitti:

    Eikös INSERT lisää tietueen eikä kirjoita päälle ?
    Siis täytyy käyttää UPDATEa.

    Eli SQL:ssä menis jotenkin näin:

    UPDATE MyTable SET OrderNo = NULL WHERE AccNO = xxxx

    jossa xxxx = se AccNO jonka tietutetta muutetaan.

    Jos halutaan muuttaa kaikista tietueista niin tietysti koko WHERE pois

    Kiitti ekaks ideasta, mutta on pikku ongelma!
    Ku siihen solu joka haluttaan MAHDOLLISESTI myös "null" arvoon tulee tieto textboxista, jossa syöttämällä null tulisi null arvo kenttään, ja jos halutaan syöttää jotain muuta, niin sitten se tallentuu joko tekstinä tai numeroina.

    Eli lause on nyt näin:

    update ' edit1.text '
    set ' edit2.text ' = ''' edit5.text '''
    where ' edit2.text ' = ''' edit3.text '''

    Ja koska edit5.text kentän molemmin puolin pitää olla hipsut se tulkitsee kirjoitetun null arvon tekstiksi null...
    Kiinnostaisikin mitä tohon pitäs lisätä, että solun voi jotenkin null:ta, mutta myös syöttää tekstiä ja numeroita.
    NVL(kenttä, arvo) lausetta on jo kokeiltu, mutta ei oikein pelitä.

    Visaista.. =)

    Äänestä

  • Huttunen kirjoitti:

    Kiitti ekaks ideasta, mutta on pikku ongelma!
    Ku siihen solu joka haluttaan MAHDOLLISESTI myös "null" arvoon tulee tieto textboxista, jossa syöttämällä null tulisi null arvo kenttään, ja jos halutaan syöttää jotain muuta, niin sitten se tallentuu joko tekstinä tai numeroina.

    Eli lause on nyt näin:

    update ' edit1.text '
    set ' edit2.text ' = ''' edit5.text '''
    where ' edit2.text ' = ''' edit3.text '''

    Ja koska edit5.text kentän molemmin puolin pitää olla hipsut se tulkitsee kirjoitetun null arvon tekstiksi null...
    Kiinnostaisikin mitä tohon pitäs lisätä, että solun voi jotenkin null:ta, mutta myös syöttää tekstiä ja numeroita.
    NVL(kenttä, arvo) lausetta on jo kokeiltu, mutta ei oikein pelitä.

    Visaista.. =)

    En nyt heti keksi muuta ratkaisua kuin kaksi erillistä UPDATEn rakennus riviä.

    Eli jotain tyyliin:

    if (strlen(edit5.text)==0)
    {update ' edit1.text '
    set ' edit2.text ' =NULL
    where ' edit2.text ' = ''' edit3.text '''}
    else
    {update ' edit1.text '
    set ' edit2.text ' = ''' edit5.text '''
    where ' edit2.text ' = ''' edit3.text '''}

    Äänestä

  • Inssi kirjoitti:

    En nyt heti keksi muuta ratkaisua kuin kaksi erillistä UPDATEn rakennus riviä.

    Eli jotain tyyliin:

    if (strlen(edit5.text)==0)
    {update ' edit1.text '
    set ' edit2.text ' =NULL
    where ' edit2.text ' = ''' edit3.text '''}
    else
    {update ' edit1.text '
    set ' edit2.text ' = ''' edit5.text '''
    where ' edit2.text ' = ''' edit3.text '''}

    Kiitti, tota pitää kokeilla, ei ollesakkaa huono idea. Tai sit kehitellä ton pohjalta jotain.
    Kiitos ja kumarrus. =)

    Äänestä

Kokeilepa SQL -lausetta:

Update Omataulu
SET Omakentta=NULL where ID=50000

Oletukset:

Taulusi nimi on Omataulu
Kentän nimi, jonka haluat NULLiksi on Omakentta
Siinä/niissä tietueissa, joissa haluat tuon Omakentta -kentän NULLata, on kentän ID arvona 50000
Missään muussa tietueessa EI ole kentän ID arvona 50000

Tuota sitten vain muokkaamaan omaan tilanteeseesi sopivaksi.

Käyttö esim. Näin:

Query1.SQL.Clear;
Query1.SQL.Add('Update Omataulu SET Omakentta=NULL where ID=50000');

Tai toki myös:
Query1.SQL.Text := 'Update Omataulu SET Omakentta=NULL where ID=50000';

Lopuksi sitten:

Query1.Execute;

Äänestä

Ja ei välttämättä mitään lainaus- tms. merkkejä.

Äänestä
  • Delphissä:

    NIL käytetään asettamaan osoitin "ei osoita mihinkään arvoon" -tilaan. Siis näin:

    var
    P : Pointer; / tai PChar tai...

    begin
    // ... koodia
    P := nil;
    // ... koodia
    end;

    mutta NULL on SQL:n "tyhjä kenttä/arvo puuttuu" -arvo.

    Äänestä

Kommentoi aloitusta


Huttunen kirjoitti:

Päivää vaan...

Pikku ongelman poikanen. Rassaan siis delphillä tehä yhtä judanssia ja ongelma on nyt seuraavanlainen.

Kuinka saada tietokannan solu takaisin NULL arvoon? Kun siis solussa käy jotain kirjoittamassa tai lisäilemässä, niin kuinka saan sen NULL tilaan takaisin. Tiedän että pelkkä tyhjän syöttäminen ( '' ) ei tosiaan tunnu olevan sama kuin NULL arvo. Käyntän siis ihan perus dbgridiä ja sen muita komponentteja. SQL lauseet on vaan koodattu suoraan koodiin, joten periaatteessa pitäsi olla helppoa, mutta kun...

Jos joku tietäväinen viitsisi kertoa, tiedän että ei ole iso ongelma.. kai..

Kiitoksia

*laulellen martti servon, mikä on kun ei taidot riitä* =)

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu