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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.08.2012, 20:47   #1
maonang
Пользователь
 
Регистрация: 23.12.2010
Сообщений: 18
Печаль Проблемы с SQL запросом. (Delphi)

Здравствуйте, не могу додуматься, почему возникает ошибка при выполнении программы с использованием SQL запроса

Вот код программы:
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var MDBObj:Variant;
     VirtualADOQuery:TADOQuery;
     StringFile:textfile;
     Directory, StringTextInFile, GetSQL:string;
     j,BufPos1,BufPos2:integer;
begin
//Создание *.mdb файла
if not FileExists('C:\Users\Admin\Desktop\53234234\Source\SurceDB.mdb') then begin
MessageBox(Application.Handle,'База данных не найдена.'+#10+'Программа сама создала необходимый файл.','Информация', MB_OK);
    try
      MDBObj:= CreateOleObject('ADOX.Catalog');
      MDBObj.Create('Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Users\Admin\Desktop\53234234\Source\SurceDB.mdb; Jet OLEDB:Engine Type=5;');
      MDBObj.ActiveConnection.Close;
      MDBObj:= Null;
    except ShowMessage('Ошибка');//Выводит сообщение при ошибке
    end;
      VirtualADOQuery:=TADOQuery.Create(self);
   VirtualADOQuery.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Admin\Desktop\53234234\Source\SurceDB.mdb;Mode=ReadWrite;Persist Security Info=False;';
      VirtualADOQuery.SQL.Clear;
    Directory:='C:\Users\Admin\Desktop\53234234\Source\SQL_F1.txt';
//Посточно парсим текстовый файл
    GetSQL:=''''+'CREATE TABLE TDB (';
    AssignFile(StringFile,Directory);
    if not fileexists(Directory) then
      rewrite(StringFile);
    reset(StringFile);
    while not eof(StringFile) do begin
      readln(StringFile,StringTextInFile);
      //начало текста(исключая пробелы впереди)
      for j:=1 to length(StringTextInFile) do
        if not (StringTextInFile[j] in [' ']) then begin
          BufPos1:=j;
          break;
        end;

      for j:=length(StringTextInFile) downto BufPos1 do
        if (StringTextInFile[j] in [' ']) then begin
          BufPos2:=j;
          break;
        end;
//Конец парсинга
      GetSQL:=GetSQL+copy(StringTextInFile,BufPos1,BufPos2-BufPos1)+copy(StringTextInFile,BufPos2,length(StringTextInFile)-BufPos2+1)+', ';
    end;
    Delete(GetSQL,length(GetSQL)-1,1);
    GetSQL:=GetSQL+');'+'''';
    closefile(StringFile);
     VirtualADOQuery.SQL.Add(GetSQL);
      //VirtualADOQuery.SQL.Add('CREATE TABLE TDB (Column_1 Text, Column_2 Text, Column_3 Text, Column_4 Text);');
    VirtualADOQuery.ExecSQL;
    FreeAndNil(VirtualADOQuery);
  end;
//--------------------
form1.Visible:=false;
form2.show;
end;
Ошибка в "VirtualADOQuery.SQL.Add(GetSQL );", но если в коде писать сам запрос, который идентичен тому, что получается в ходе программы через парсинг, то работает "VirtualADOQuery.SQL.Add('CREAT E TABLE TDB (Column_1 Text, Column_2 Text, Column_3 Text, Column_4 Text);');
VirtualADOQuery.ExecSQL;".
Ниже сама ошибка:
http://s2.ipicture.ru/uploads/20120811/DQxXIJi7.jpg

Последний раз редактировалось maonang; 11.08.2012 в 20:57.
maonang вне форума Ответить с цитированием
Старый 11.08.2012, 21:22   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Кавычки не нужны в начале и в конце запроса
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 11.08.2012, 21:27   #3
maonang
Пользователь
 
Регистрация: 23.12.2010
Сообщений: 18
По умолчанию

Тогда возникает другая ошибка
http://s2.ipicture.ru/uploads/20120811/uSAo1e5Q.jpg
но при этом в самом файле создаются необходимые столбцы

Последний раз редактировалось maonang; 11.08.2012 в 21:31.
maonang вне форума Ответить с цитированием
Старый 11.08.2012, 21:43   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Попробуйте точку с запятой убрать в конце запроса
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 11.08.2012, 21:47   #5
maonang
Пользователь
 
Регистрация: 23.12.2010
Сообщений: 18
По умолчанию

Ура! Получилось, спасибо большое!
maonang вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы с SQL в Delphi *stRong* Помощь студентам 3 23.05.2012 07:35
Delphi: Извлечение названий таблиц, объедиенных SQL запросом в одну. Tolkach2 Помощь студентам 15 18.03.2012 11:34
Проблема с sql запросом в Delphi CRASH040 БД в Delphi 8 25.05.2011 19:49
ПРоблема с SQL запросом в Delphi ZBEP БД в Delphi 4 23.05.2011 19:17
как создать новый лист в ecxel sql запросом из delphi? betirsolt БД в Delphi 2 14.06.2010 15:47