Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2013, 16:53   #1
Scorpuha
Форумчанин
 
Регистрация: 10.10.2013
Сообщений: 177
По умолчанию Запись значений в таблицу

Создаю таблицу программно. таблица сама создается, все ОК. а вот значения в поля не записываются. помогите, вот код.

Код:
begin

with datamodule2.ADOQuery1 do begin
SQL.Text:='CREATE TABLE '+edit1.text+' (ID INTEGER, Numb String, Obj VARCHAR(255), Data Date, Vremya Date, Id_Tovara INTEGER, PRIMARY KEY(ID))';
 if ExecSQL<>0 then begin
  with datamodule2.ADOTable1.Create (nil) do begin
   TableName:=edit1.text;
datamodule2.ADOTable1.Insert;
    datamodule2.ADOTable1.FieldByName('Numb').AsString :=NewDoc.Edit1.Text;
   post;
Scorpuha вне форума Ответить с цитированием
Старый 08.11.2013, 17:37   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,022
По умолчанию

зачем весь этот взрыв клавишь?
eval вне форума Ответить с цитированием
Старый 08.11.2013, 22:46   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

И не будут записываться.
Фишка в том что твой "воистину взрыв клавиш" не предусматривает для datamodule2.ADOTable1.Create самого важного - ConnectionString.
Короче, после 'CREATE TABLE скорми в datamodule2.ADOQuery1 команду INSERT с нужными параметрами. Где INSERT - команда SQL.

Код:
with datamodule2.ADOQuery1 do begin
SQL.Text:='CREATE TABLE '+edit1.text+' (ID INTEGER, Numb String, Obj VARCHAR(255), Data Date, Vremya Date, Id_Tovara INTEGER, PRIMARY KEY(ID))';
 if ExecSQL<>0 then begin
    SQL.Text:='insert into  '+edit1.text+'(Numb) VALUES ('+QuotedStr(NewDoc.Edit1.Text)+')';
    ExecSQL;
    Commit;
 end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.11.2013, 00:50   #4
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

ХОчу знать зачем этот мазахизм? ПОчему имено так ? Чем вызвано столь нерациональное решение

Да и потом зачем из другой формы обращатся к ДатаМодулю и там что то создавать? Мне кажется проще сделать функцию в Датамодуле передать туда параметром значение из Edit1 и создать там таблицу, но всё же хочется узнать чем вызван такой подход?

Последний раз редактировалось Dozent; 09.11.2013 в 01:06.
Dozent вне форума Ответить с цитированием
Старый 11.11.2013, 15:06   #5
Scorpuha
Форумчанин
 
Регистрация: 10.10.2013
Сообщений: 177
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
И не будут записываться.
Фишка в том что твой "воистину взрыв клавиш" не предусматривает для datamodule2.ADOTable1.Create самого важного - ConnectionString.
Короче, после 'CREATE TABLE скорми в datamodule2.ADOQuery1 команду INSERT с нужными параметрами. Где INSERT - команда SQL.

Код:
with datamodule2.ADOQuery1 do begin
SQL.Text:='CREATE TABLE '+edit1.text+' (ID INTEGER, Numb String, Obj VARCHAR(255), Data Date, Vremya Date, Id_Tovara INTEGER, PRIMARY KEY(ID))';
 if ExecSQL<>0 then begin
    SQL.Text:='insert into  '+edit1.text+'(Numb) VALUES ('+QuotedStr(NewDoc.Edit1.Text)+')';
    ExecSQL;
    Commit;
 end;

вот ругается
[Error] NewDocument.pas(53): Undeclared identifier: 'Commit'
Scorpuha вне форума Ответить с цитированием
Старый 11.11.2013, 15:11   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Значит не Commit а post;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.11.2013, 15:15   #7
Scorpuha
Форумчанин
 
Регистрация: 10.10.2013
Сообщений: 177
По умолчанию

вот мой полный вариант кода
все также , таблица создается, но инфа не добавляется

Код:
begin

with datamodule2.ADOQuery1 do begin
SQL.Text:='CREATE TABLE '+edit1.text+' (ID INTEGER, Numb INTEGER, Obj VARCHAR(255), Data Date, Vremya Date, Id_Tovara INTEGER, PRIMARY KEY(ID))';
 if ExecSQL<>0 then begin

  with datamodule2.ADOTable1.Create (nil) do begin
   ConnectionString:=datamodule2.ADOQuery1.ConnectionString;
   TableName:=edit1.text;
    SQL.Text:='insert into  '+edit1.text+'(Numb) VALUES ('+QuotedStr(NewDoc.Edit1.Text)+')';
    ExecSQL;
    post;
Scorpuha вне форума Ответить с цитированием
Старый 11.11.2013, 15:17   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Тебе нужен какой-то механизм для поля ID. Сделай его хоть автоинкрементным что-ли...
СУБД какая?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.11.2013, 15:19   #9
Scorpuha
Форумчанин
 
Регистрация: 10.10.2013
Сообщений: 177
По умолчанию

Access, ADO
Scorpuha вне форума Ответить с цитированием
Старый 11.11.2013, 16:02   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Тогда кажется так:
Код:
'CREATE TABLE '+edit1.text+' (ID INTEGER counter(1,1), Numb INTEGER, Obj VARCHAR(255), Data Date, Vremya Date, Id_Tovara INTEGER, PRIMARY KEY(ID))';
По идее в INSERT не нужно будет указывать это поле, оно само будет подставляться на единицу больше.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В задаче необходимо вывести на экран таблицу значений функции У(х) и ее разложения в ряд С (х) для значений х от до с шагом.(Паск fashionweek Паскаль, Turbo Pascal, PascalABC.NET 1 07.02.2013 23:11
Напечатать таблицу значений функции Lizonka-88 Помощь студентам 1 25.01.2012 10:42
напечатать таблицу значений функции Artur1992 Помощь студентам 5 24.09.2010 21:13
Подстановка значений в таблицу по условию mchip Microsoft Office Access 15 01.07.2008 09:54