Projekat

Općenito

Profil

Akcije

Greške #25891

Zatvoren

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

Greške #25891: update_rec_dbf_and_server() bug, problem kada u id-ovima imamo numerička polja

Dodano od Saša Vranić prije više od 14 godina. Izmjenjeno prije više od 14 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

Izmjenjeno od Saša Vranić prije više od 14 godina Akcije #1

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

Izmjenjeno od Saša Vranić prije više od 14 godina Akcije #2

Izmjenjeno od Saša Vranić prije više od 14 godina Akcije #3

  • % završeno promijenjeno iz 0 u 10

Izmjenjeno od Ernad Husremović prije više od 14 godina Akcije #4

  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

Izmjenjeno od Ernad Husremović prije više od 14 godina Akcije #5

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

Izmjenjeno od Ernad Husremović prije više od 14 godina Akcije #6

fokusirajmo se na semaphores sifrarnici ovaj HSEEK

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

Izmjenjeno od Ernad Husremović prije više od 14 godina Akcije #7

i brišemo lokalno slogove koji su predmet sinhronizacije

Izmjenjeno od Ernad Husremović prije više od 14 godina Akcije #8

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

Izmjenjeno od Ernad Husremović prije više od 14 godina Akcije #9

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

Izmjenjeno od Ernad Husremović prije više od 14 godina Akcije #10

  • 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

Izmjenjeno od Ernad Husremović prije više od 14 godina Akcije #11

  • % završeno promijenjeno iz 10 u 90

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

Izmjenjeno od Saša Vranić prije više od 14 godina Akcije #12

ispravio sam ovo prema ovome

Izmjenjeno od Saša Vranić prije više od 14 godina Akcije #13

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

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

Izmjenjeno od Saša Vranić prije više od 14 godina Akcije #14

sada treba provjeriti da li radi

Izmjenjeno od Saša Vranić prije više od 14 godina Akcije #15

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

Izmjenjeno od Ernad Husremović prije više od 14 godina Akcije #16

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

Izmjenjeno od Ernad Husremović prije više od 14 godina Akcije #18

        // 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

Izmjenjeno od Ernad Husremović prije više od 14 godina Akcije #20

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" 

Izmjenjeno od Ernad Husremović prije više od 14 godina Akcije #21

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

Izmjenjeno od Ernad Husremović prije više od 14 godina Akcije #22

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

Također dostupno kao PDF Atom