Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapamiętać RTF w bazie MySQL
Forum PHP.pl > Forum > Bazy danych > MySQL
AutorNET
Witam,

Mam problem z zapisywaniem w bazie danych w polu MEMO ciągu sformatowanego (Rich Text Format):

struktura tabeli np:
CREATE TABLE `market_asort` (
`id` mediumint(8) unsigned NOT NULL auto_increment,
`opis` text default NULL,
PRIMARY KEY (`id`)
)

Gdy próbuję zapisać w polu OPIS ciąg RTF, pokazuje mi błąd tego typu: Column count doesn't match value count at row 1.

Czy ktoś może mi pomóc w tym zagadnieniu ?
nospor
pokaz jak to wkladasz. zapewne zapomniales o jakims polu w zapytaniu. najprawodopodobniej o id smile.gif
tylko w sql pomin calego rtf, wstaw tylko 'xyz', no chyba ze masz to w zmiennej
AutorNET
Dokładnie to realizuje mi to program napisany w Delphi. Cały ciąg RTF mam w tabeli Paradoxa także w polu Memo i tutaj działa dobrze - moge odczytywać i zapisywać bez problemu.
Błąd wyskakuje tylko wtedy, gdy próbuję zapisać taki ciąg w polu bazy MySQL. (Przy zapisywaniu innych rekordów, gdy pole OPIS jest puste jest OK).
elessar
To zalezy jak w tym delphi zapisujesz (recznie tworzysz sql, korzystasz z komponentow ) ale najprawdopodobniej w RTF masz apostrof. Jesli to nie o to chodzi to napiszesz z czego korzystasz.
AutorNET
DELPHI 2005.
Oczywiście korzystam z komponentu, ale zapytanie SQL tworzę ręcznie podstawiając dane ze zmiennych i wywołuję procedurę komponentu .ExecSQL('zapytanie');
Zasada jest taka. Wszystkie dane zapamiętuje w tabeli PARADOX. Potem łącze się z bazą danych MySQL i przenoszę te dane z tabeli PARADOX'a do MySQL'a.

kod zapytania SQL:

sSQL:= 'INSERT INTO market_asort '+
'(domena,kat,nazwa,miara,wymiar1t,wymiar1,wymiar2t,wymiar2,waga,cena,vat,prod
uc,gwar,gwar_id,stan,dostep,opis,cenawww,org_id)'+
'VALUES ('+IntToStr(Serwer.Domena)+','+
IntToStr(sprKat.Fields[0].AsInteger)+','+
''''+to_ISO1( tTabela.FieldByName('nazwa').AsString )+''', '+
''''+to_ISO1( tTabela.FieldByName('miara').AsString )+''','+
''''+to_ISO1( tTabela.FieldByName('wymiar1').AsString )+''','+
''''+to_ISO1( tTabela.FieldByName('wymiar1t').AsString )+''','+
''''+to_ISO1( tTabela.FieldByName('wymiar2').AsString )+''','+
''''+to_ISO1( tTabela.FieldByName('wymiar2t').AsString )+''','+
''''+to_ISO1( tTabela.FieldByName('waga').AsString )+''','+
CurrToStr(tTabela.FieldByName('cena').AsCurrency)+','+
IntToStr(sprVat.Fields[0].AsInteger)+','+
IntToStr(sprProduc.Fields[0].AsInteger)+','+
IntToStr(tTabela.FieldByName('gwar').AsInteger)+','+
IntToStr(sprGwar.Fields[0].AsInteger)+','+
IntToStr(tTabela.FieldByName('stan').AsInteger)+','+
IntToStr(tTabela.FieldByName('dostep').AsInteger)+','+
sOpis+
IntToStr(tTabela.FieldByName('CenaWWW').AsInteger)+','+
IntToStr(tTabela.FieldByName('id').AsInteger)+');';

try
msUpdateAsort.ExecSQL(sSQL);
tTabela.Edit;
tTabela.FieldByName('upd').AsBoolean:= False;
tTabela.Post;
except
ShowMessage('Niestety nie udało się dopisać !');
tTabela.Next;
end;

Krew mnie zalewa, bo 4 pierwsze rekordy ładnie przepisał, a przy kolejnych wyskakuje błąd. Jeśli wyłączyłem w kodzie, żeby w pole MySQL podstawiał ciąg pusty to taki rekord zostaje zapamiętany, a w przeciwnym przypadku wyskakuje błąd:

[1136] #21S01 Column count doesn't match value count at row 1:
Client: 4.1.10
Server: 4.1.11-Debian_4.3tld-log
elessar
No to tak jak juz mowilem musisz miec apostrof w AnsiStringu, musisz do niego slasha dodac.


A tak swoja droga to najlepiej dodawac przez komponent, wtedy nie musisz sie o nic martwic.

Query.Append();
Query.FieldByName("POLE").AsString = tTabela.FieldByName('nazwa').AsString;
(...)
Query.Post();

Zreszta widze w tym kodzie inne pulapki ale to nie forum o delphi tongue.gif
AutorNET
To, co przedstawiłem, to kolejna próba uzyskania dobrego efektu.
Wróciłem do komponentu i ParamByName() i w końcu znalazłem problem.

do Parametru z cena byla podstawiana wartosc Currency zamiast Float i tutaj byl problem - juz jest OK.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.