Страница 1 из 1
Когда создается БД?
Добавлено: Сб 07 дек 2013 15:22
imobile
Здравствуйте.
Для создания таблиц БД я использую
Код: Выделить всё
Form2->MyConnection2->ExecSQL("CREATE TABLE IF NOT EXISTS
Далее проверяю на отсутствие столбца(в старых версиях у меня его не было)
Код: Выделить всё
UnicodeString sz =
"SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='" +
ComboBox1->Text + "' AND TABLE_NAME='doscl' AND COLUMN_NAME='DC_CONF'"
MyQuery1->SQL->Clear();
MyQuery1->SQL->Add(sz);
MyQuery1->Open();
if (MyQuery1->IsEmpty()) {
Form2->MyConnection2->ExecSQL
("ALTER TABLE doscl"
" ADD COLUMN DC_CONF INTEGER(11) UNSIGNED DEFAULT NULL COMMENT 'НАСТРОЙКИ' AFTER DC_DOS; ",
NULL, 0);
Вызывает ошибку, столбец уже есть.Я стал проверять, а таблиц нет, те есть первая конструкция н закомителась, Как закомитеть ее?
Re: Когда создается БД?
Добавлено: Пн 09 дек 2013 10:54
AndreyZ
Здравствуйте,
Я выполнил следующий код:
Код: Выделить всё
MyConnection1->ExecSQL("CREATE TABLE IF NOT EXISTS test(ID INT PRIMARY KEY)");
UnicodeString sz = "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='" +
MyConnection1->Database + "' AND TABLE_NAME='test' AND COLUMN_NAME='ID1'";
MyQuery1->Connection = MyConnection1;
MyQuery1->SQL->Clear();
MyQuery1->SQL->Add(sz);
MyQuery1->Open();
if (MyQuery1->IsEmpty()) {
MyConnection1->ExecSQL("ALTER TABLE test ADD COLUMN ID1 int AFTER ID");
}
, он выполняется без ошибок. Проверьте пожалуйста выполняется ли он у Вас. Если да, проверьте что Ваш код работает использует одну и ту же базу (MyConnection2->Database = ComboBox1->Text) .
Если код не выполняется, укажите следующее:
- точную версию Вашей IDE;
- точную версию MyDAC (Вы можете найти ее на закладке About редактора компонента TMyConnection);
- точную версию MySQL сервера и клиента (Вы можете найти их на закладке Info редактора компонента TMyConnection).
Re: Когда создается БД?
Добавлено: Пн 09 дек 2013 19:08
imobile
Ваш код Не вызывает ошибки, ставил его перед этим, однако этот(скопировал) вызывает ошибку. После ошибки в дбфордже нет таблиц(около 30, должно было создать)
Код: Выделить всё
Form2->MyConnection2->ExecSQL
("CREATE DATABASE IF NOT EXISTS `u_db`"
" CHARACTER SET utf8 COLLATE utf8_general_ci", NULL, 0);
ComboBox1->Text = "u_db";
//Далее вызываю функцию Createtab(); В которой около 30 таблиц, включая эту
Form2->MyConnection2->ExecSQL("CREATE TABLE IF NOT EXISTS doscl ( "
" DC_ID int(11) UNSIGNED NOT NULL AUTO_INCREMENT, "
" DC_CLIENTID int(11) UNSIGNED DEFAULT NULL, "
" DC_CNAME varchar(50) DEFAULT NULL, "
" DC_PAS varchar(255) DEFAULT NULL, "
" DC_DOS int(11) UNSIGNED DEFAULT NULL, "
" DC_CONF int(11) UNSIGNED DEFAULT NULL, "
" PRIMARY KEY (DC_ID), "
" UNIQUE INDEX DC_CLIENTID (DC_CLIENTID), "
" CONSTRAINT FK_doscl_client_CL_ID FOREIGN KEY (DC_CLIENTID) "
" REFERENCES client (CL_ID) ON DELETE RESTRICT ON UPDATE CASCADE, "
" CONSTRAINT FK_doscl_conf1_C1_ID FOREIGN KEY (DC_CONF) "
" REFERENCES conf1 (C1_ID) ON DELETE RESTRICT ON UPDATE RESTRICT, "
" CONSTRAINT FK_doscl_dost_D_ID FOREIGN KEY (DC_DOS) "
" REFERENCES dost (D_ID) ON DELETE RESTRICT ON UPDATE RESTRICT "
") "
"ENGINE = INNODB "
//"AUTO_INCREMENT = 4 "
//"AVG_ROW_LENGTH = 8192 "
"CHARACTER SET utf8 "
"COLLATE utf8_general_ci; ",NULL,0);
//А затем идут такие проверки, эта первая, ставил вашу, но ошибки не вызывало, однако таблиц не было помогает Это
// Form2->MyConnection2->Disconnect();
// Form2->MyConnection2->Connect();
UnicodeString sz =
"SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='" +
ComboBox1->Text + "' AND TABLE_NAME='doscl' AND COLUMN_NAME='DC_CONF'";
MyQuery1->SQL->Clear();
MyQuery1->SQL->Add(sz);
MyQuery1->Open();
if (MyQuery1->IsEmpty()) {
Form2->MyConnection2->ExecSQL
("ALTER TABLE doscl"
" ADD COLUMN DC_CONF INTEGER(11) UNSIGNED DEFAULT NULL COMMENT 'НАСТРОЙКИ' AFTER DC_DOS; ",
NULL, 0);
}
// =====================================================================
Embarcadero® RAD Studio XE3 Version 17.0.4770.56661
7.6.11
MySQL server version: 5.5.32
Re: Когда создается БД?
Добавлено: Вт 10 дек 2013 10:59
AndreyZ
Вам следует использовать следующий код:
Код: Выделить всё
Form2->MyConnection2->ExecSQL("CREATE DATABASE IF NOT EXISTS `u_db`"
" CHARACTER SET utf8 COLLATE utf8_general_ci", NULL, 0);
Form2->MyConnection2->Database = "u_db";
...
Re: Когда создается БД?
Добавлено: Сб 14 дек 2013 13:29
imobile
Вызывает ошибку на первом квери
First chance exception at $50034E67. Exception class $C0000005 with message 'access violation at 0x50034e67: write of address 0x006c005c'. Process UchetBuilder.exe (8684)
Пробовал connection=false;а затем connect(), ошибка появляется такая же, только дальше.
Re: Когда создается БД?
Добавлено: Сб 14 дек 2013 14:39
imobile
Среда заглючила, после перезагрузки все ОК.
Спасибо.
Re: Когда создается БД?
Добавлено: Пн 16 дек 2013 10:07
AndreyZ
Пожалуйста. Я рад что смог помочь.