Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Insert / 12 сообщений из 12, страница 1 из 1
14.01.2006, 23:41:27
    #33483152
Vi4k@
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert
Есть таблица
Books (bID, bName, bYear, bEx, bclID, bHistory)

в Делфи интерфейс. В обработчие Инсерт:

авторprocedure TForm2.DataSetInsert1Execute(Sender: TObject);
var s:string;
begin
SqlCommand('begin');

SqlCommand('INSERT INTO Books (bID,bName,bYear,bEx,bclID,bHistory) VALUES (NULL,'+trim(Edit1.Text)+','+trim(Edit2.Text)+','+trim(Edit3.Text)+','+trim(Edit4.Text)+','+trim(Edit5.Text)+')');
//ActionsBlock(true);
end;

Числа из Edit нормально вставляет, на попытку вставить строку пишет: "Unknown column [текст из Edit] in field list"
аццтой какой-то... помогите!!!

з.ы.
bID - автоинкремент
...
Рейтинг: 0 / 0
14.01.2006, 23:58:15
    #33483163
Хрен
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert
а ты не мог бы сначала сформировать sql строку и вывести ее на экран, а уже потом ее скормить в sqlcommand?

привел бы полностью тут sql выражение, может что-нибудь прояснилось бы
...
Рейтинг: 0 / 0
14.01.2006, 23:59:34
    #33483164
Хрен
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert
бе, ты последнее поле без кавычек вставляешь, а оно по смыслу - текстовое.
...
Рейтинг: 0 / 0
15.01.2006, 00:10:24
    #33483170
Vi4k@
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert
Хренбе, ты последнее поле без кавычек вставляешь, а оно по смыслу - текстовое.

такие вот типы:

create table Books (bID int NOT NULL AUTO_INCREMENT, bName char (100), bYear int, bEx int, bclID smallint, bHistory text, PRIMARY KEY (bID));

А кавычки куда?
...
Рейтинг: 0 / 0
15.01.2006, 06:01:02
    #33483236
Dinky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert
двойные кавычки можно использовать?
Код: plaintext
1.
(NULL,"+trim(Edit1.Text)+","+trim(Edit2.Text)+","+trim(Edit3.Text)+","+trim(Edit4.Text)+",'"+trim(Edit5.Text)+"')");

--
Dmitry
...
Рейтинг: 0 / 0
15.01.2006, 08:53:42
    #33483262
Хрен
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert
Vi4k@ Хренбе, ты последнее поле без кавычек вставляешь, а оно по смыслу - текстовое.

такие вот типы:

create table Books (bID int NOT NULL AUTO_INCREMENT, bName char (100), bYear int, bEx int, bclID smallint, bHistory text, PRIMARY KEY (bID));

А кавычки куда?

Вокруг значения для bName и значения для bHistory
...
Рейтинг: 0 / 0
15.01.2006, 10:41:19
    #33483291
Vi4k@
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert
Большое всем спасибо!!! И простите за беспокойство. Я учусь пока и первый раз пишу на Delphi, раньше - на C++ Builder. Там с кавычками все иначе...

Сейчас я все варианты перебрала, благо их 4. Работает вот так " '
а если просто ", он воспринимает выражение как текст.

THANX
...
Рейтинг: 0 / 0
16.01.2006, 13:43:17
    #33484903
Валентин К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert
Напиши функцию преобразования типов, чтобы не путаться с кавычками :)
Для любителей Delphi+MySQL такой примерчик :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
function VarToSQL(AValue:Variant):string;
begin
  case VarType(AValue) of
    varString,varUnknown,varStrArg:Result:=''''+VarToStr(AValue)+'''';
    varSmallint,varInteger,varInt64,varWord,varLongWord:Result:=VarAsType(AValue,varInteger);
    varEmpty,varNull:Result:='NULL';
    varDouble,varCurrency:Result:=FloatForAccess(AValue);
    varDate:Result:=DateForMySQL(AValue);
  else
    Result:='NULL';
  end;
end;

где
Function FloatForAccess(N:Variant):String;
var s:string;
    i:integer;
begin
if VarIsNull(N) then begin
 Result:='NULL';
 exit;
 end;
s:=FloatToStr(N);
For i:= 1  to Length(S) do begin
    if s[i]=',' then s[i]:='.';
    end;
Result:=s;
end;

и
function DateForMySQL(D:Variant):string;//Под мускул
begin
if VarIsNull(D) then begin
 Result:='NULL';
 exit;
 end;
Result:=''''+FormatDateTime('yyyy"."mm"."dd',D)+'''';
end;
...
Рейтинг: 0 / 0
16.01.2006, 13:44:34
    #33484910
Валентин К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert
Только оптимизируйте замену запятой на точку для DOUBLE...
...
Рейтинг: 0 / 0
16.01.2006, 14:08:30
    #33485014
Vi4k@
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert
хм... я просто использовала quotedstr, чтоб не париться, а так прикольно )))
...
Рейтинг: 0 / 0
16.01.2006, 14:49:20
    #33485149
Валентин К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert
Vi4k@хм... я просто использовала quotedstr, чтоб не париться, а так прикольно )))
Для дат и double ???
...
Рейтинг: 0 / 0
16.01.2006, 14:50:25
    #33485156
Валентин К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Insert
Модуль SysUtils

function QuotedStr(const S: string): string;
var
I: Integer;
begin
Result := S;
for I := Length(Result) downto 1 do
if Result = '''' then Insert('''', Result, I);
Result := '''' + Result + '''';
end;
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Insert / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]