Когда создается БД?

Обсуждение возникших проблем, предложений и ошибок MyDAC компонентов
Закрыто
imobile
Сообщения: 103
Зарегистрирован: Сб 12 ноя 2011 00:12

Когда создается БД?

Сообщение imobile » Сб 07 дек 2013 15:22

Здравствуйте.
Для создания таблиц БД я использую

Код: Выделить всё

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);
Вызывает ошибку, столбец уже есть.Я стал проверять, а таблиц нет, те есть первая конструкция н закомителась, Как закомитеть ее?

AndreyZ
Devart Team
Сообщения: 328
Зарегистрирован: Чт 08 сен 2011 13:18

Re: Когда создается БД?

Сообщение AndreyZ » Пн 09 дек 2013 10:54

Здравствуйте,

Я выполнил следующий код:

Код: Выделить всё

  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).

imobile
Сообщения: 103
Зарегистрирован: Сб 12 ноя 2011 00:12

Re: Когда создается БД?

Сообщение imobile » Пн 09 дек 2013 19:08

Ваш код Не вызывает ошибки, ставил его перед этим, однако этот(скопировал) вызывает ошибку. После ошибки в дбфордже нет таблиц(около 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

AndreyZ
Devart Team
Сообщения: 328
Зарегистрирован: Чт 08 сен 2011 13:18

Re: Когда создается БД?

Сообщение AndreyZ » Вт 10 дек 2013 10:59

Вам следует использовать следующий код:

Код: Выделить всё

Form2->MyConnection2->ExecSQL("CREATE DATABASE IF NOT EXISTS `u_db`"
  " CHARACTER SET utf8 COLLATE utf8_general_ci", NULL, 0);
Form2->MyConnection2->Database = "u_db";
...

imobile
Сообщения: 103
Зарегистрирован: Сб 12 ноя 2011 00:12

Re: Когда создается БД?

Сообщение imobile » Сб 14 дек 2013 13:29

Вызывает ошибку на первом квери
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(), ошибка появляется такая же, только дальше.

imobile
Сообщения: 103
Зарегистрирован: Сб 12 ноя 2011 00:12

Re: Когда создается БД?

Сообщение imobile » Сб 14 дек 2013 14:39

Среда заглючила, после перезагрузки все ОК.
Спасибо.

AndreyZ
Devart Team
Сообщения: 328
Зарегистрирован: Чт 08 сен 2011 13:18

Re: Когда создается БД?

Сообщение AndreyZ » Пн 16 дек 2013 10:07

Пожалуйста. Я рад что смог помочь.

Закрыто