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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2013, 10:40   #1
hemn6vyr
Пользователь
 
Регистрация: 18.06.2012
Сообщений: 67
По умолчанию ADOquery sql запрос в access

Вот функция выполнения sql запроса
Код:
Function SQL(SQL, Param: TStringList): TStringList; Stdcall;
  Var
    I: Integer;
  Begin
    Result := TStringList.Create;
    Try
      Query.Close;
      Query.SQL.Clear;
      For I := 0 To SQL.Count - 1 Do
        Begin
          Query.SQL.Add(SQL[I]);
        End;
      Query.ExecSQL;
      Query.Open;
      If Param[0] <> 'non' Then
        Begin
          For I := 0 To Param.Count - 1 Do
            Begin
              Result.Add(Query.FieldByName(Param[I]).AsString);
            End;
        End
      Else
        Begin
          Result.Add('Good');
        End;
      Query.Close;
    Except
      On E: Exception Do
        Begin
          Result.Add('Ошибка: [' + E.ClassName + '] [' + E.Message + ']');
        End;
    End;
  End;
Вот вызов этой функции
Код:
  Procedure TTTEdit.Button1Click(Sender: TObject);
    Var
      A, B: TStringList;
    Begin
      A := TSTringList.Create;
      B := Tstringlist.Create;
      B.Add('non');
      A.Add('IF EXISTS (SELECT FROM [Tablica|Fac] WHERE ddate = ' + #39 + '25.03.13' + #39 + ')');
      A.Add('UPDATE [Tablica|Fac] SET les1 = 123, les2 = 234, les3 = 123 WHERE ddate = ' + #39 + '25.03.13' + #39);
      A.Add('ELSE');
      A.Add('INSERT INTO [Tablica|Fac] (les1, les2, les3) VALUES (3, 20wq, 3dd)');
      ShowMessage(ConStr('C:\Google Диск\Di\Win32\Release\TimeTable.mdb').Text);
      SQL(A, B);
    End;
Приложение при вызове зависает.
С sql знаком плохо, не подскажете что тут не так?
hemn6vyr вне форума Ответить с цитированием
Старый 24.04.2013, 10:49   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

тут до sql еще далеко, тут надо сначала код весь переписать.
eval вне форума Ответить с цитированием
Старый 24.04.2013, 10:51   #3
hemn6vyr
Пользователь
 
Регистрация: 18.06.2012
Сообщений: 67
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
тут до sql еще далеко, тут надо сначала код весь переписать.
Код работает, и результаты выдаёт. А вот с этим запросом что-то не так.
hemn6vyr вне форума Ответить с цитированием
Старый 24.04.2013, 10:51   #4
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

какая-то неясная 1я процедура(
1. а ты пробовал выполнить этот запрос в простом ADOQuery, без всяких заморочек?
2. к чему такие сложности в реализации?

UPD:
1.
Цитата:
Query.ExecSQL;
Query.Open;
должно быть что-то одно
2. должно быть
Код:
A.Add('IF EXISTS (SELECT * FROM [Tablica|Fac]
3. что есть [Tablica|Fac] ? какое-то странное название таблицы
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...

Последний раз редактировалось Yurk@; 24.04.2013 в 10:58.
Yurk@ вне форума Ответить с цитированием
Старый 24.04.2013, 10:56   #5
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
Код работает, и результаты выдаёт.
это не код а пьяный бред

это что?
Query.Close;
Query.SQL.Clear;

это что?
For I := 0 To SQL.Count - 1 Do
Begin
Query.SQL.Add(SQL[I]);
End;

это что?
Query.ExecSQL;
Query.Open;


дальше еще хуже ..
eval вне форума Ответить с цитированием
Старый 24.04.2013, 10:57   #6
hemn6vyr
Пользователь
 
Регистрация: 18.06.2012
Сообщений: 67
По умолчанию

Цитата:
Сообщение от Yurk@ Посмотреть сообщение
какая-то неясная 1я процедура(
1. а ты пробовал выполнить этот запрос в простом ADOQuery, без всяких заморочек?
2. к чему такие сложности в реализации?
Первая процедура принимает 2 стринглиста. первый - эт sql запрос,
Код:
      For I := 0 To SQL.Count - 1 Do
        Begin
          Query.SQL.Add(SQL[I]);
        End;
второй поля которые надо вернуть.
Код:
If Param[0] <> 'non' Then
        Begin
          For I := 0 To Param.Count - 1 Do
            Begin
              Result.Add(Query.FieldByName(Param[I]).AsString);
            End;
        End
      Else
        Begin
          Result.Add('Good');
        End;
А в остальном это
Код:
      Query.Close;
      Query.SQL.Clear;
      Query.SQL.Add(SQL[I]);
      Query.ExecSQL;
      Query.Open;
      Result.Add(Query.FieldByName(Param[I]).AsString);
      Query.Close;
Вот приложение именно на запросе и зависает :-(
hemn6vyr вне форума Ответить с цитированием
Старый 24.04.2013, 11:00   #7
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
ddate = ' + #39 + '25.03.13' + #39 +
а это надо в тему шедевров
eval вне форума Ответить с цитированием
Старый 24.04.2013, 11:01   #8
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

согласен с eval, бред редкий
hemn6vyr, я уловил логику работы функции, но спросил я тебя совсем другое: попробуй этот sql запрос выполнить в каком-нибудь slq-редакторе (хоть в том же access-е) ... выполнится ли он?
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 24.04.2013, 11:05   #9
hemn6vyr
Пользователь
 
Регистрация: 18.06.2012
Сообщений: 67
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
Query.Close;
Query.SQL.Clear;
Очистка, ибо не во всех функциях после использования он чистится.
Цитата:
Сообщение от eval Посмотреть сообщение
For I := 0 To SQL.Count - 1 Do
Begin
Query.SQL.Add(SQL[I]);
End;
запрос в tstringlist ибо удобнее оперировать.
Цитата:
Сообщение от eval Посмотреть сообщение
Query.ExecSQL;
Query.Open;
А это пережитки прошлого
hemn6vyr вне форума Ответить с цитированием
Старый 24.04.2013, 11:07   #10
hemn6vyr
Пользователь
 
Регистрация: 18.06.2012
Сообщений: 67
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
а это надо в тему шедевров
Пожалуйста, только без кавычек ошибка, а delphi думает что кавычка - начало/конец строки :-)
hemn6vyr вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Adoquery SQL-запрос qadhhj БД в Delphi 0 30.04.2012 15:44
ПЕРЕДЕЛАТЬ ЗАПРОС ИЗ ACCESS в ADOQuery cokolik БД в Delphi 2 12.02.2011 18:38
ADOQuery и запрос с Access WALL БД в Delphi 4 25.10.2010 03:25
ADOQuery SQL запрос по времени, не по дате... Highlander1981 БД в Delphi 1 01.04.2010 01:08