Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Код разбора файла, состоящего из последовательности sql-запросов / 7 сообщений из 7, страница 1 из 1
16.03.2005, 15:45
    #32963769
Cauchy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Код разбора файла, состоящего из последовательности sql-запросов
Потребовалось мне прочитать и выполнить содержимое файла, состоящего из SQL-запросов типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE TABLE apps_list (
  app_id int( 11 ) NOT NULL auto_increment,
  app_title varchar( 255 ) NOT NULL default '',
  PRIMARY KEY  (app_id),
  UNIQUE KEY app_title (app_title)
) TYPE=InnoDB;

INSERT INTO apps_list VALUES ( 13 ,'перечень должностей и профессий работников, работающих в ночное время');
INSERT INTO apps_list VALUES ( 14 ,'перечень должностей работников, которым предоставляется дополнительный отпуск за ненормированный рабочий день');
INSERT INTO apps_list VALUES ( 17 ,'перечень профессий и должностей с правом на дополнительный отпуск и сокращенный рабочий день');
INSERT INTO apps_list VALUES ( 16 ,'перечень профессий и должностей с правом на досрочную трудовую пенсию');
INSERT INTO apps_list VALUES ( 20 ,'перечень профессий и должностей с правом на лечебно-профилактическое питание');
т.е. по сути это дамп части базы данных
Сервер БД у меня MySQL.
Для этого я написал специальный код, который позволяет все это разобрать.
Но только потом до меня дошло, что это можно сделать стандартными средствами типа mysql.exe :).
Я конечно у себя все это убрал и сделал через вызов mysql.exe, но это может кому-нибудь пригодиться и я решил выложить код.
Сервер БД MySQL, компилятор C++Builder
Код: 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.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
/*основной смысл алгоритма состоит в том, что мы "откусываем" начальную часть запроса до символа "'"    
или же до закрывающего символа ";"
если мы находимся внутри апострофов, значит игнорируем закрывающий символ ";",
 т. к. он просто является частью текстового поля
qq - любой компонент, позволяющий выполнять sql-запросы 
(в данном случае я использовал ZQuery из библиотеки Zeos)
Str - TStrings, содержит текст файла*/
      qq->SQL->Clear();
      AnsiString query="";
      AnsiString CurString;
      bool StrValue=false; //находимся ли мы между символов ' '
      for (int i= 0 ;i<Str->Count;i++)
      {
         CurString=Str->Strings[i];
         while (CurString.Pos(" ") ==  1 ) CurString.Delete( 1 , 1 );
         while (CurString!="" && CurString.Pos("--") !=  1 )
           if (StrValue)   //если сейчас находимся между ' '(одиночными апострофами), то игнорируем символ ";"
           {
              if (int p=CurString.Pos("'"))
              {
                 if (CurString.SubString(p-1,1)!="\\")  //если это не служебный символ, а просто входит в текстовое поле, то 

игнорируем его
                 {
                    StrValue=false;
                 }
                 query += CurString.SubString(1,p);
                 CurString.Delete(1,p);
              }
              else
              {
                 query += CurString;
                 CurString="";
              }
           }
           else
              if (int k=CurString.Pos("'")) //ищем следующий апостроф
              {
                 if (CurString.SubString(k- 1 , 1 )!="\\")
                 {
                    StrValue=true;
                 }
                 query += CurString.SubString( 1 ,k);
                 CurString.Delete( 1 ,k);
              }
              else
                if (int p=CurString.Pos(";")) //нашли закрывающий символ sql-запроса
                {
                   query += CurString.SubString( 1 ,p- 1 );
                   CurString.Delete( 1 ,p);
                   qq->SQL->Add(query);
                   qq->ExecSQL();
                   query="";
                   qq->SQL->Clear();

                }
                else
                {
                   query += CurString;
                   CurString="";
                }
      }
...
Рейтинг: 0 / 0
16.03.2005, 16:53
    #32964048
josia
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Код разбора файла, состоящего из последовательности sql-запросов
Зачем бесплатно раздавать то, что можно продать за деньги ? Данный код легко может быть использован в бизнес приложениях, за счет своей общности и легкой расширяемости, а также в преподавательской деятельности, за счет своей прозрачности.
...
Рейтинг: 0 / 0
16.03.2005, 17:03
    #32964083
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Код разбора файла, состоящего из последовательности sql-запросов
Готов заплатить за этот исходник 0.99$!
...
Рейтинг: 0 / 0
16.03.2005, 17:04
    #32964086
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Код разбора файла, состоящего из последовательности sql-запросов
...
Рейтинг: 0 / 0
16.03.2005, 17:34
    #32964200
Cauchy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Код разбора файла, состоящего из последовательности sql-запросов
maytonГотов заплатить за этот исходник 0.99$!
Готов принять эту сумму! (на кружку пива хватит)
...
Рейтинг: 0 / 0
16.03.2005, 17:44
    #32964239
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Код разбора файла, состоящего из последовательности sql-запросов
Cauchy maytonГотов заплатить за этот исходник 0.99$!
Готов принять эту сумму! (на кружку пива хватит)

Давай номер своего счета!
...
Рейтинг: 0 / 0
17.03.2005, 08:53
    #32964874
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Код разбора файла, состоящего из последовательности sql-запросов
Скопировал , код себе , пошел продавать


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Код разбора файла, состоящего из последовательности sql-запросов / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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