Projekat

Općenito

Profil

Akcije

Greške #25891

Zatvoren

update_rec_dbf_and_server() bug, problem kada u id-ovima imamo numerička polja

Dodano od Saša Vranić prije oko 13 godina. Izmjenjeno prije oko 13 godina.

Status:
Zatvoreno
Prioritet:
Odmah riješiti
Odgovorna osoba:
Početak:
26.12.2011
Završetak:
% završeno:

100%

Procjena vremena:

Opis

Ovo je recimo interesantno kod LD-a

Kod LD-a su nam ključna polja

  • godina (N)
  • mjesec (N)
  • idrj (C)
  • idradn (C)
  • obr (C)

Povezani tiketi 3 (0 otvoreno3 zatvorenih)

korelira sa F18 - Podrška #25872: Modul LD, korekcija semafora i scatter() gather() funkcija, identifikacija rizičnih dijelovaZatvorenoSaša Vranić23.12.2011

Akcije
korelira sa F18 - Podrška #25905: tip: Bug report - v3, cargo var u error handleruZatvorenoErnad Husremović27.12.2011

Akcije
korelira sa F18 - Podrška #25776: tip: refactor scatter/gather, dbf update, dbf createZatvorenoErnad Husremović21.12.2011

Akcije
Akcije #1

Izmjenjeno od Saša Vranić prije oko 13 godina

ovo je ta kritična tačka

https://github.com/knowhow/F18_knowhow/blob/298ff27cdd5bdf453a4a35e/common/f18_db.prg#L366

kada se puni string _full_id_dbf a vrijednost _values_dbf[_field] je zapravo numeričko polje godina ili mjesec

Akcije #2

Izmjenjeno od Saša Vranić prije oko 13 godina

Akcije #3

Izmjenjeno od Saša Vranić prije oko 13 godina

  • % završeno promijenjeno iz 0 u 10
Akcije #4

Izmjenjeno od Ernad Husremović prije oko 13 godina

  if !update_rec_server_and_dbf( nil,  _vals, _fields, ;
                { |x| "godina=" + _sql_quote(STR(x["godina"],4)) + ;
                    " and mjesec=" + _sql_quote(STR(x["mjesec"],2)) + ;
                    " and idrj=" + _sql_quote(x["idrj"]) + ;
                    " and idradn=" + _sql_quote(x["idradn"])  + ;
                    " and obr=" + _sql_quote(x["obr"]) } )
            ....

ovaj kodni blok tvori sql where izraz

u njemu ne vidim potrebu za STR operacije

"godina=" + _sql_quote(x["godina"])) + ;
                    " and mjesec=" + _sql_quote(x["mjesec"]) + ;
                    " and idrj=" + _sql_quote(x["idrj"]) + ;

...

ovaj where izraz je korektan godina je numeričko polje i usporedba mora biti sa numeričkim poljem u SQL izrazu

Akcije #5

Izmjenjeno od Ernad Husremović prije oko 13 godina

hmm a ovdje je problem sabiranja dbf numeričkih i string polja

https://github.com/knowhow/F18_knowhow/blob/298ff27cdd5bdf453a4a35e/common/f18_db.prg#L371

Akcije #6

Izmjenjeno od Ernad Husremović prije oko 13 godina

fokusirajmo se na semaphores sifrarnici ovaj HSEEK

tu se znači jednostavno prebacujemo na index tag i radimo HSEEK po ključu IDS-a

Akcije #7

Izmjenjeno od Ernad Husremović prije oko 13 godina

i brišemo lokalno slogove koji su predmet sinhronizacije

Akcije #8

Izmjenjeno od Ernad Husremović prije oko 13 godina

znači što se tiče sql upita ono što sam rekao u predhodnom komentaru stoji - ne treba str u SQL izrazu

Akcije #9

Izmjenjeno od Ernad Husremović prije oko 13 godina

mi ovo trebamo uraditi za numerička polja:

_fields := { "godina", "mjesec", "idrj", "idradn", "obr" }
_fields := { {"godina", 4}, {"mjesec", 2}, "idrj", "idradn", "obr" }

konda u update rec dbf_and server ova polja STR-ovati sa brojem koji je naveden ... to je čisto

Akcije #10

Izmjenjeno od Ernad Husremović prije oko 13 godina

  • Status promijenjeno iz Novo u Dodijeljeno
  • Odgovorna osoba promijenjeno iz Ernad Husremović u Saša Vranić
  • Prioritet promijenjeno iz Normalan u Odmah riješiti

ovo sam uradio na core librariju

nisam testirao. uzmi to na konkretnom problemu

Akcije #11

Izmjenjeno od Ernad Husremović prije oko 13 godina

  • % završeno promijenjeno iz 10 u 90

znači ispravi where_block sql i setuj fields num polja kao što sam naveo

Akcije #12

Izmjenjeno od Saša Vranić prije oko 13 godina

ispravio sam ovo prema ovome

Akcije #13

Izmjenjeno od Saša Vranić prije oko 13 godina

korigovao sam funkciju, još dosta je tu bilo za ispravke.. ako je numerička varijabla itd...

https://github.com/knowhow/F18_knowhow/commit/c3764a865dab4a7055d4b8e1f084164011839f13

Akcije #14

Izmjenjeno od Saša Vranić prije oko 13 godina

sada treba provjeriti da li radi

Akcije #15

Izmjenjeno od Saša Vranić prije oko 13 godina

mislim da ovdje postoji još jedan problem, ova funkcija pretpostavlja postojeće zapise u dbf-u da bi radila update i provjeravala da li treba raditi update

ako nema zapisa, onda mislim da je problem, ali to je puko nagađanje, to sam trebao sa debugerom da vidim šta se događa

Akcije #16

Izmjenjeno od Ernad Husremović prije oko 13 godina

  • Odgovorna osoba promijenjeno iz Saša Vranić u Ernad Husremović
Akcije #18

Izmjenjeno od Ernad Husremović prije oko 13 godina

        // http://redmine.bring.out.ba/issues/25891#note-9
        // {"num_polje", length}
        _t_field := _field[1]
        _t_field_dec := _field[2]

        _values_dbf[_t_field] := EVAL(FIELDBLOCK(_t_field))
        if _values_dbf[_t_field] != values[ _t_field ]
            _changed_id := .t.
        endif
        _full_id_dbf += STR(_values_dbf[ _t_field ], _t_field_dec)
        _full_id_mem += STR( values[ _t_field ], _t_field_dec )

...

ključna stvar je ta što se _values_dbf puni sa numeričkim vrijednostima dok se _full_id_dbf formira kao string varijabla i taj string šalje u semafor na IDS polje.

kasnije će se taj kompozitni ključ koristiti za sekvenciu brisanja dbf-a drugih korisnika

Akcije #20

Izmjenjeno od Ernad Husremović prije oko 13 godina

AADD(gaDBFs, { F_RADKR  , "RADKR"   , "ld_radkr", { |alg| ld_radkr_from_sql_server(alg) }, "IDS", 

{ "idradn", "idkred", "naosnovu", {"godina", 4}, {"mjesec", 2 } },   <<<<<<<< dbf fields

{|x| "idradn=" + _sql_quote(x["idradn"]) + " AND idkred=" + _sql_quote(x["idkred"]) +  " AND naosnovu=" + _sql_quote(x["naosnovu"]) +  " AND godina=" + STR(x["godina"], 4) + " AND mjesec=" + STR(x["mjesec"], 2) },  <<<<<<< where_block za SQL where

"2" } )                 <<<<<<<<< tag "2" 
Akcije #21

Izmjenjeno od Ernad Husremović prije oko 13 godina

u where_block-u koristimo STR za numerička polja. bitno je da ta vrijednost bude identične širine kao što je i samo polje

Akcije #22

Izmjenjeno od Ernad Husremović prije oko 13 godina

  • Status promijenjeno iz Dodijeljeno u Zatvoreno
  • % završeno promijenjeno iz 90 u 100
Akcije

Također dostupno kao Atom PDF