Új hozzászólás Aktív témák
-
sztanozs
veterán
válasz Sk8erPeter #1300 üzenetére
Paraméterezett esetben a fejlesztői nyelv általában segítséget nyújt abban, hogy az értéket ne string formában, hanem a nyelv natív adatformátumában (pl. java, .net) adja át, amit az adatbáziskezelő csomag képes olyan formában átadni a db szerver számára, hogy az ne okozzon értelmezési/konverziós problémát.
Persze olyan környezetben, ahol nincs natív datetime formátum, ott ez nem segít...JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
-
Sk8erPeter
nagyúr
válasz rum-cajsz #1302 üzenetére
Idézem, amit itt írt:
"egy 10/11/12-ről megmondani, hogy mi volt az eredeti dátum 33%-os eséllyel lehet - és az adatbáziskezelő is ilyen eséllyel vesz fel jó értéket."
Ez egy jogos szempont, erre hogy alkalmazol dátumkonverziós függvényeket úgy, hogy biztosan a jó eredményt kapd?
Még akkor sem egyértelmű, ha legalább az évszám négy számjegyű, mert így is felcserélődhet a nap-hónap.====
(#1301) sztanozs : ez végül is igaz.
Mondjuk a UNIX timestamp (másodpercek) legalább tuti nem téved, aztán abból akármilyen formátumra is átalakíthatod.
A felhasználói inputnál meg normális esetben a normális fejlesztő úgyis megoldja, hogy a dátum szigorúbb feltételekhez legyen kötve, akár szétbontva a dátumot külön-külön mezőkre (év, hónap, nap, stb.), akár egy JavaScript-alapú datepickerrel egyszerűbbé téve a választást.Sk8erPeter
-
rum-cajsz
őstag
válasz Sk8erPeter #1303 üzenetére
Az a programozó, aki megengedi, hogy bármit beírhassanak a dátum típusú mezőbe, az megérdemli, hogy a tökén végigrobogjon egy GNU csorda. (de látom Te is pont ezt írod alant)
Azt pedig már tényleg csak nagyon zárójelben jegyzem meg, hogy ha a dátum adatok vegyes szerkezetűek, akkor elég nagy felelőtlenség/hanyagság előfeldolgozás nélkül belehányni őket egy dátum típusú mezőbe.
De az eredeti kérdés egyébként így nézett ki:
INSERT INTO log (DateTime, TypeID) VALUES ({ ts '1990-12-31 00:00:00' } , 1)Szerintem nincs olyan valós indok, ami felhozható a prepare statment ellen. (de szerintem ebben is egyetértünk)
=Kilroy was here============================ooO=*(_)*=Ooo=======
-
Sk8erPeter
nagyúr
válasz rum-cajsz #1304 üzenetére
Na várj, szerintem elbeszélünk egymás mellett.
Senki nem is mondta eddig, hogy a prepared statement ne lenne jó, sőt, eddig mindenki amellett érvelt. Amit sztanozs felhozott, az az, hogy adatbázisonként eltérhet a datetime formátuma (erre én is linkeltem a MySQL-es, meg az MSSQL-es példát, hogy máshogy néz ki), ez már eleve problémát okozhat, tehát hiába adsz át stringként prepared statementtel valamit, ha a formátum akkor is rossz, mert mondjuk más formátumra van konfigurálva az adatbázisszerver, vagy mittudomén.
De már kezdek én is belezavarodni."Az a programozó, aki megengedi, hogy bármit beírhassanak a dátum típusú mezőbe, az megérdemli, hogy a tökén végigrobogjon egy GNU csorda."
Agreed.Sk8erPeter
-
sanzi89
addikt
Újabb gyönyörűség. Van egy táblám, benne adatok. Nincs semmilyen kulcs, csak behányva mindenféle adat. Van benne 2 sor, ami totálisan megegyezik, minden mező értéke ugyan az. Ebből kellene SQL lekérdezéssel törölni csak az egyiket. Ezt meg lehet egyáltalán csinálni?
"Mindent azért kell tudni mert kérdezik, nem azért mert hasznos."
-
sanzi89
addikt
válasz Sk8erPeter #1307 üzenetére
Hát, az a nehéz benne, hogy nem tudom hogyan kell.
Van egy adatbázis - Access - amiben van rengeteg adat, ebből kikeresem a szar sorokat, és ezekből kellene törölni úgy, hogy csak egy maradjon. ODBC-n fut, és Delphiben kellene rá egy Query-t csinálni, amihez ugye kellene egy SQL parancs. Ez hibádzik.
De örülök, hogy ilyen egyszerű probléma, mert akkor várom a megoldást.
[ Szerkesztve ]
"Mindent azért kell tudni mert kérdezik, nem azért mert hasznos."
-
Sk8erPeter
nagyúr
válasz sanzi89 #1308 üzenetére
Szerencsére nem sok dolgom van Access-szel.
De gyorsan rákeresve ezzel pl. lehet böngészni Access adatbázist is: RazorSQL
Lehet, hogy elbeszélünk egymás mellett, de amit írtál, azt úgy értelmezhető, hogy összesen 2 egyező sor van, és az egyiket törölni kellene. De javíts ki, ha arra gondolsz, hogy MINDEN sorból dupla van......
Ha viszont csak egy, akkor igazából nem vágom, hogy most mi is a probléma, egy rendes grafikus alapú adatbázis-kezelőben csak az adott sornál rámész, hogy delete, és meg is vagy. Vagy beadod query-ként, most csak legegyszerűbb példával élve:
DELETE FROM akármitábla WHERE id = 3
[link]Sk8erPeter
-
sanzi89
addikt
válasz Sk8erPeter #1309 üzenetére
Egy Delphiben írt program egyik modulja lenne az, hogy bizonyos hiba miatt néha rekordok duplázódnak. Ezekből nem tudjuk mennyi van, vagy hogy hol vannak az adatbázisban. Eljutottam oda, hogy ezek a hibás adatok ki vannak listázva egy DBGrid-be. Itt a user kiválasztja, hogy melyiket hagyjuk meg - sajna így kell csinálni, mivel lehet más hiba is, és oda kell az, hogy el lehessen dönteni melyik maradjon - és a kiválasztottat törölni. Rengeteg sor van, több százezer, és lehet csak egy duplázott sor van benne.
Szóval külön adatbázis böngészőt nem használhatok, nem tudok simán rámenni és törölni. Plusz nincs ilyen, hogy id, nincs semmi. Ilyesmi sorokat képzelj el:
Név | Kártyaszám | Születési hely
Kis Pista | 1 | Budapest
Kis Pista | 1 | Budapest
Nagy Béla | 2 | DebrecenEbből kellene az egyik Kis Pistát törölni.
"Mindent azért kell tudni mert kérdezik, nem azért mert hasznos."
-
Goose-T
veterán
válasz sanzi89 #1308 üzenetére
Ha csak egy sor van, ami kétszer van benne, akkor kitörlöd mindkettőt, aztán létrehozol egy új sort ugyanazokkal az adatokkal, csak egyszer. Ha sok duplázást kell kiszűrni, akkor meg új tábla kell, nem tudom, hogy az Access támogatja-e a SELECT INTO utasítást, ha igen, akkor így át tudod tölteni az adatokat duplázás nélkül egy új táblába:
select distinct * into UJ_TABLA from REGI_TABLA
Aztán ha megvan, akkor a régi tábla törölhető, az új táblát meg átnevezed a régi nevére. Ha nem megy SELECT INTO, akkor létrehozol egy új táblát a régi mintájára ugyanazzal a mezőkkel, és nyomsz egy ilyet:
insert UJ_TABLA select distinct * from REGI_TABLA
Aztán megint mehet az átnevezés.
Eladó XBOX: https://tinyurl.com/mvjdennu *** Rockbandám: https://fb.me/scharlotterhodes *** Gitárelektronikai műhelyem: https://www.fb.me/goosetgitar
-
bpx
őstag
válasz sanzi89 #1306 üzenetére
duplikált (vagy akár annál többször ismétlődő) sorok törlése (egy megtartása) a'la Oracle:
DELETE FROM tabla1
WHERE rowid NOT IN
(SELECT MIN(rowid) FROM tabla1
GROUP BY oszlop1, oszlop2, oszlop3, ... );na most az Access-hez semmi közöm nincs, szóval Google
ha ott is van rowid "metaoszlop", akkor nyert ügy
ha nincs akkor mondjuk legegyszerűbb egy SELECT DISTINCT amit már írtak[ Szerkesztve ]
-
sanzi89
addikt
válasz Sk8erPeter #1307 üzenetére
Ezek szerint mégse annyira egyértelműen könnyű a dolog...
@Goose-T
Köszi, szerintem valami ilyesmi lesz. Kitöröm őket, aztán beszúrok egy sort. Nem elegáns, de működik legalább.[ Szerkesztve ]
"Mindent azért kell tudni mert kérdezik, nem azért mert hasznos."
-
Sk8erPeter
nagyúr
válasz sanzi89 #1315 üzenetére
Nem tudom, mi a frászt vársz, amikor az elején nekünk kell helyetted kitalálni az infókat, belőled meg harapófogóval kell kihúzni...
Ha szarul teszed fel a kérdést, talán ne lepődj meg, hogy nem kapsz egyből konkrét választ. És ne forgasd a szemeidet, ha már te kérsz segítséget...Sk8erPeter
-
sanzi89
addikt
válasz martonx #1317 üzenetére
Értelmes válasz, hmmm.... Kérdésem:
"...SQL lekérdezéssel..."Válaszod:
"...Access grafikus tábla megjelenítőjében jobb gomb..."Van még kérdésed?
@Sk8erPeter
Jó, le kellett volna írom, hogy milyen adatbázis, ebben igazad van, de azért a Te válaszaid se voltak annyira hasznos infók. Szintén, SQL lekérdezés, Delphi-n belül, tök logikus, hogy használjak egy új adatbázis kezelő programot. Leírtam, hogy van benne 2 sor, ami dupla, erre megkérdezed, hogy mindegyik vagy csak 2. Leírom, hogy nincs kulcs, nincs azonosító, minden sor ugyan azt tartalmazza, erre beírod, hogy id szerint töröljek. Csak forgatni tudom a szemem...Egyébként a segítség kérésben igazad van, bocs érte, csak amilyen lekezelően írtad az első kommentedet, arra akartam reagálni.
[ Szerkesztve ]
"Mindent azért kell tudni mert kérdezik, nem azért mert hasznos."
-
bpx
őstag
szerintem a kérdéssel semmi gond nem volt, a válaszok viszont annál cifrábbak voltak
SQL-t kért => grafikus tool
meg delete .. where id = .., miközben leírta hogy minden érték egyezik és nincs semmi kulcs -
Sk8erPeter
nagyúr
válasz sanzi89 #1318 üzenetére
Abban igazad van, hogy írtad, hogy nincs kulcs, ez őszintén szólva kissé számomra elsikkadt a hsz.-ek után. DE ilyen alapon - ha már ilyen jól belejöttünk az egymásba való belekötésbe - attól még tartozhat valami olyan mező is a táblához, ami alapján egyértelműen lehet azonosítani az adott sort (még ha nem is ténylegesen KULCS az adatbázis szintjén!!), de erről sem írtál SEMMIT, tehát fogalmunk nem lehetett az adatbázis-szerkezetedről sem.
Delphi? Mutasd már meg, itt hol írtál ilyenről egyáltalán: [link]. És ha Delphi, akkor mi van? Ez a rész a lényeg szempontjából miért érdekes? Attól még miért ne lehetne akár grafikus alapú adatbázis-kezelőből módosítani az adatbázist? Mi köze a kettőnek egymáshoz?
A sok-sok (!!) duplikációval kapcsolatban meg hadd idézzelek:
"Van benne 2 sor, ami totálisan megegyezik, minden mező értéke ugyan az."
Amit itt írsz, azt jelenti, összesen 2 sorral van problémád. Ebből tehát rohadtul nem derül ki az, amit a későbbiekben írtál le, hogy SOK duplikáció van, ergo NEM csak két sor."Van egy táblám, benne adatok."
Semmi információ arról, hogy ez Access lenne, és milyen adatokról van szó (értsd: adatbázis-struktúra, esetleg példa).Idióta visszakérdezgetések és a mostani, tök felesleges veszekedés és e-pénisz-villogtatás elkerülése érdekében pl. feltehetted volna a kérdést úgy (csak egy példa), hogy "van egy Access-táblám, semmilyen mező nem azonosítja egyértelműen a sorokat (nincs azonosítójuk), és elég sok sor duplikálva van. Milyen módon tudnám megszüntetni a duplikációt?
Struktúra:
ABCDE
Egy konkrét példa egy sorra (ilyenből van kettő):
XYZ"======
(#1319) -Zeratul- : ja, nyilván a kérdés tökéletes volt. Azért olvasd el a fentit, hogy hogyan lehetett volna elkerülni, hogy most itt ilyen óvodás hőzöngés alakuljon ki.
Sk8erPeter
-
sanzi89
addikt
válasz Sk8erPeter #1321 üzenetére
Rendben, legközelebb igyekszem pontosabbnak lenni.
[ Szerkesztve ]
"Mindent azért kell tudni mert kérdezik, nem azért mert hasznos."
-
rum-cajsz
őstag
egyre több az indok az access adatbázisod kidobására, miért nem használod ki?
=Kilroy was here============================ooO=*(_)*=Ooo=======
-
martonx
veterán
válasz rum-cajsz #1323 üzenetére
mondjuk elnézve a problémákat (amellett, hogy access ellenes vagyok), pont nem az access maga a probléma, hanem egyrészt szarul lett felépítve a használt adatbázis, másrészt a program is szarul lett megírva ami ilyen duplikációkat hoz létre bele.
Ezek a hibák, ha béna a programozó, pont ugyanígy megmaradnak, bármilyen db motort is használjon az ember.Én kérek elnézést!
-
-
sanzi89
addikt
válasz sztanozs #1326 üzenetére
Ez nem jó, mivel nem módosíthatom ennyire az eredeti táblát.
A megoldás az lett, hogy COUNT-tal megszámoltam, hány ugyanolyan sor van, ha több, mint 1, akkor eltároltam az adatokat változókba, végrehajtottam a törlést, ami így mindkét bejegyzést törölte, aztán egy sima INSERT-tel beillesztettem 1 sort a régi adatokkal. Nem elegáns, de működik.
"Mindent azért kell tudni mert kérdezik, nem azért mert hasznos."
-
-
lakisoft
veterán
válasz Sk8erPeter #1330 üzenetére
Morcos voltam
-
sanzi89
addikt
Újabb gondom volna. Van egy TXT, benne mindenféle adat. Van egy ilyen:
SZ'MITÓGÉP+NYOMTATÓ
Ezt kellene beletenni egy VARCHAR típusú mezőbe. Mindig elszáll error-ral. Ha kicserélem a ' jelet mondjuk egy A betűre, akkor már megeszi. De nem csak itt, máshol se teszi be a ' jel miatt. Az adatot nem szeretném módosítani, egy az egybe tolja fel egy táblába a TXT tartalmát. Mit lehet ezzel csinálni, hogy megegye a ' jelet?
"Mindent azért kell tudni mert kérdezik, nem azért mert hasznos."
-
Goose-T
veterán
válasz sanzi89 #1332 üzenetére
Duplázd meg a txt-ben az aposztrófokat, úgy már be fogja venni. Hogy jobban értsd: cseréld ki ezeket: ' erre: '' .
Szerk.: ne a hagyományos magyar kettős idézőjelre cseréld ("), hanem a szimpla aposztrófból tegyél kettőt egymás után(''), és azt egynek fogja venni az SQL.
[ Szerkesztve ]
Eladó XBOX: https://tinyurl.com/mvjdennu *** Rockbandám: https://fb.me/scharlotterhodes *** Gitárelektronikai műhelyem: https://www.fb.me/goosetgitar
-
sztanozs
veterán
-
sanzi89
addikt
válasz sztanozs #1334 üzenetére
A fenti kommentek alapján már próbáltam, de Delphi alatt valahogy sehogy nem bír összejönni a parametrizált SQL beillesztés. Természetesen most sem... Itt tartok:
SQLCode:='INSERT INTO sap.eszkoz VALUES ('+slTagok[1]+','+slTagok[2]+','+slTagok[3]+','''+slTagok[4]+''','''+slTagok[5]+''', ''szam'','''+slTagok[7]+''',TXT50)';
ZQuery1.SQL.Clear;
ZQuery1.ParamByName('TXT50').AsString := slTagok[8];
ZQuery1.SQL.Add(SQLCode);
ZQuery1.ExecSQL;A hiba az, hogy TXT50 not found...
@Goose-T
Köszi, az ötlet jó, de ha meg lehet oldani, akkor módosítás nélkül szeretném.[ Szerkesztve ]
"Mindent azért kell tudni mert kérdezik, nem azért mert hasznos."
-
sanzi89
addikt
válasz sztanozs #1337 üzenetére
Oh, köszi!
Reggel 8 óra bújom ezt a szart, már jojózik a szemem, és egyszerűen nem vettem észre a példa kódban a kettőspontot.
@Goose-T
Nem bonyolult, csak plusz, felesleges művelet. Ha nem lehetne másképp megoldani, természetesen így csinálnám, de ezzel a paraméteres dologgal talán egyszerűbb."Mindent azért kell tudni mert kérdezik, nem azért mert hasznos."
-
sztanozs
veterán
válasz sanzi89 #1338 üzenetére
Az volna az igazi, ha mindent paraméterrel illesztenél be. Akkor nem kellene az aposztrofozás a string mezőknél és az összes lehetséges string kódolási hiba kiszűrhető volna...
Erről beszélek
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
weiss
addikt
Sziasztok! Tudnátok ajánlani valami könyvet, amiből elsajátíthatóak a DB kezelés alapjai?
I did nothing, the pavement was his enemy!
-
weiss
addikt
90% üzemeltető + 10 % fejlesztés. Oracle + MS. De perpill csak nagyon alapok vannak. Nem tudom ismered-e, de CCNA vizsgára vannak szuper könyvek, amikből el lehet sajátítani nemcsak a Cisco berendezéseket, hanem a hálózatokat is. Na, szóval ilyen kellene adatbázisokra, ha létezik
I did nothing, the pavement was his enemy!
-
Lacces
őstag
Sziasztok!
Lehetséges saját gépen localhoston Oracle adatbázist futtatni? Illetve van szabadon letölthető adatbázis?
Vagy valamilyen ingyenes online hely, ahol az Oracle SQL-t tudnám gyakorolni.[ Szerkesztve ]
-
kispx
addikt
Express Edition-t lehet localhostra telepíteni.
-
Lacces
őstag
Köszi, adatbázist tudsz ajánlani tanulásra? Meg milyen developer programot?
Mindenkinek, mysql:
MySQL esetén, egy friss adatbázis van, hogyan lehet elérni, hogy az autoincreamenttel létrehozott id-ket úgymond újra rendezze. Létrehoztam az első rekordot, aminek egy 1-et adott. Létrejött közben a második is, annak 2-et, de létrejött még a 3. és 4.-ik is amit töröltem, és most ismét felvittem egy rekordot, és annak az id-ja már 5.
És azt szeretném, hogy ne ezek az ID-k legyenek benne: 1,2,5, hanem, 1,2,3.
Ha kitörlök egy elemet, akkor az ID-kat újrarendeze, és növekvőbe rakja.
Vagy ez felesleges?
Meglehet azt valahogy oldani, hogy újra "kiossza/rendezze" az id-kat, (nem találom a megfelelő szót)?
Új hozzászólás Aktív témák
- Zsír Lenovo ideapad 5 14ALC05 Prémium Ultrabook -40% 14" Brutál AMD Ryzen 7 4700U 8Mag 8/512 FHD IPS
- Apple Airtag új, bontatlan és tokok - Darabra is 1db/11eFT 2db/21eFT 3db/31eFT
- Apple Pencil 2022 (1. generáció)
- Tyű-ha Lenovo Thinkpad T14 "Golyóálló" Üzleti Laptop 14" -50% i7-10610U 4Mag 32GB/512GB FHD IPS
- Eladó Asus Z13 i7-12700H 16GB RAM RTX 3050 Ti 1 TB
- Samsung Z fold 5
- Dell Optiplex 3020 MT, i3-4160 CPU, 4GB RAM, 500GB HDD, Windows 10 asztali számítógép pc
- Sony ericsson U1i Saito,dobozos demo
- Dell Optiplex 7010 MT, i5-3470 CPU, 250GB SSD, 8GB RAM, 500GB HDD, Windows 10 asztali számítógép pc
- HP ProDesk 800 G4 65W Tiny / Mini PC - Core i5 8500/8GB ram/256GB SSD -esztétikai hibás