Страница 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
Пожалуйста. Я рад что смог помочь.