![]() |
![]() ![]() |
![]() |
--franz87-- |
![]()
Post
#1
|
Goście ![]() |
Witam,
Mam dwa problemy przy zapisie do bazy Access (*mdb) z poziomu skryptu PHP. 1. Tworzę tabele, i chcę zastosować IF NOT EXISTS, żeby, gdy tabela istnieje nie tworzono jej.
Próbowałem dawać "IF NOT EXISTS" w różnych miejscach, ale zawsze wywala błąd. To samo chcę zastosować do INSERT INTO przy tworzeniu rekordu, by nie dodawał dubla.Też nie działa. 2. Dałem ID typ AUTOINCREMENT, żeby rekord sam dodawał odpowiednią wartość ID, ale nie działa. Robiłem to zostawiając przy ID pusty string.
Jeżeli mu podam jakąś wartość ID to działa, ale ja chcę, żeby on dodawał nast wolne ID automatycznie |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa ![]() |
CREATE TABLE IF NOT EXISTS `XXX` (...
Przy insert nie wpisuj ID w pierwszym nawiasie, pomijaj to pole. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 0 Dołączył: 24.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
CREATE TABLE IF NOT EXISTS `XXX` (... Nie działa: Warning: odbc_exec(): in C:\lolalizacja/plik.php on line 34 Warning: odbc_exec() expects at least 2 parameters, 0 given in C:\lolalizacja/plik.php on line 34 34 linia wskazuje na $wynik = odbc_exec($polaczenie,$sql)or die(odbc_exec()); Przy insert nie wpisuj ID w pierwszym nawiasie, pomijaj to pole. To działa |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
W Jet-SQL używanym w Accessie nie ma "IF NOT EXISTS" w żadnym miejscu. Musisz najpierw sprawdzić, czy tabela istnieje, a potem ew. utworzyć.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 0 Dołączył: 24.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
W Jet-SQL używanym w Accessie nie ma "IF NOT EXISTS" w żadnym miejscu. Musisz najpierw sprawdzić, czy tabela istnieje, a potem ew. utworzyć. Dzięki, rozwiązałem to tak:
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 0 Dołączył: 24.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki, a masz pomysł jak sprawdzać czy zapisywany rekord istnieje już w tabeli?
Żeby nie tworzyły się duble. Możnaby pobierać najpierw rekord i porównywać go z danymi do zapisu, ale to chyba nie byłoby optymalne wyjście... |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Pewnie trzeba ustawić odpowiedni UNIQUE INDEX.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 0 Dołączył: 24.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Mam kolejny problem z zapisem liczby zmiennoprzecinkowej.
Ustawiałem typ pola tabeli na DOUBLE,FLOAT,DECIMAL(ten nie działał). A zmienną string, która zawierała np. '22,50' lub '22.50' rzutowałem na (float) lub (double). W efekcie co najwyżej udało mi się zapisać do bazy liczbę z uciętymi liczbami po przecinku/kropce - np. samo 22 Drugi problem to zapis daty/godziny w danym formacie np. 'RR-MM-DD GG-MM-SS' Tu już w ogóle jest problem przy określeniu typu i maski przy tworzeniu tabeli. A co dopiero będzie przy zapisie do bazy. Dodam, że date przechowuje w zmiennej $data jako string, a czas w $czas jako string Ten post edytował franz87 25.02.2013, 00:06:33 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Typ NUMERIC powinien być odpowiedni. Nie możesz przekazywać liczby z przecinkiem, bo to jest złe (np. przy konstruowaniu SQL bez parametrów przecinek zostanie potraktowany jako separator pól.) Co do tego ucinannia to nie wiem - pokaż kod.
A czemu daty chcesz zapisywać jako string? Zapisuj jako DATETIME. Tylko, że w Jet-SQL się trochę inaczej zapisuje:
Datę (czas) zapisuje się w formacie #MM/DD/YYYY HH:NN:SS# Najpierw MIESIĄC!! |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 0 Dołączył: 24.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Z tym typem zmiennoprzecinkowym nadal nie działa.
Zamieszczam kod.
Teraz dodaje rekord:
Jeżeli dam echo $sql to zapisywany rekord wygląda na dobry:
Wywala błąd : Warning: odbc_exec(): in C:\polacz.php on line 44 Warning: odbc_exec() expects at least 2 parameters, 0 given in C:\polacz.php on line 44 co wskazuje na $wynik = odbc_exec($polaczenie,$sql) or die(odbc_exec()); $user,$cena,$ilosc,$data,$czas,$nazwa_aukcji,$numer_aukcji -> to są wszystko stringi, dlatego dla $numer_aukcji i $ilosc rzutuje je na INT Próbowałem rzutować $cena na float,double, ale to nic nie daje. Teraz co ciekawe, jeżeli zamiast $cena dam '2,99' to wpisze do bazy 2,99 a przecież ja mu podaje to samo w $cena ! Ten post edytował franz87 25.02.2013, 13:01:17 |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
A tak?
ew. zamiast floatval($cena) $floatval(str_replace(',','.',$cena)) Ten post edytował mmmmmmm 25.02.2013, 14:32:15 |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 0 Dołączył: 24.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Wszystko działa jak powinno.
Miałem to wczoraj prawie dobrze tylko zapomniałem usunąc ' ' ![]() Ten post edytował franz87 25.02.2013, 19:42:18 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 09:48 |