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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.08.2015, 16:08   #11
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А как можно понять, если в начале совсем другое показал. Кавычки пляшут как им хочется
Код:
ADOQuery1.SQL.Add('                                                 where stParentType = ''Маршрут'' and stChildType <> ''Элемент маршрута''');
или параметризировать
Код:
ADOQuery1.SQL.Add('                                                 where stParentType = :s1 and stChildType <> :s2);
ADOQuery1.Parameters.ParamByName('s1').value := 'Маршрут';
ADOQuery1.Parameters.ParamByName('s2').value := 'Элемент маршрута';
И два :s1 ошибка, только уникальные имена параметров
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 24.08.2015 в 16:10.
Аватар вне форума Ответить с цитированием
Старый 24.08.2015, 16:10   #12
nactyx
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 152
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ошибка понятна?
Если честно - не до конца. Почему в SQL Server Management Studio работало нормально?
nactyx вне форума Ответить с цитированием
Старый 24.08.2015, 16:12   #13
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Потому, что в строковой константе делфи каждая входящая кавычка должна дублироваться, иначе воспринимается компилятором как начало или конец константы. Всамой строке потом она не продублирована
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.08.2015, 16:13   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вы посмотрите на свой пост. Даже движок форума подсветил ошибку!

вы ставите '
это ЗАВЕРШЕНИЕ строки.
потом пишете неизвестный для Delphi текст (слово Маршрут)
он его не находит и матерится.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.08.2015, 16:13   #15
nactyx
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 152
По умолчанию

Вот таким образом всё это дело пытаюсь "засунуть" в excel (код связанный с excel'ем - не мой. Пишет, что время ожидания истекло. В SQL Server Management Studio запрос выполняется примерно за 30 секунд, может важна эта информация.
Непосредственно сам код:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var Excel, FData: Variant;
    i, j: Integer;
begin
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT p._PRODUCT, v.value, e.stValue');
ADOQuery1.SQL.Add('FROM [Тяжмаш].[dbo].[uit_vwTechProc] a,');
ADOQuery1.SQL.Add('     [Тяжмаш].[dbo].[stLinks] b,');
ADOQuery1.SQL.Add('     [Тяжмаш].[dbo].[vwObjects] c,');
ADOQuery1.SQL.Add('     [Тяжмаш].[dbo].[stLinks] d,');
ADOQuery1.SQL.Add('     [Тяжмаш].[dbo].[vwObjects] p,');
ADOQuery1.SQL.Add('     [Тяжмаш].[dbo].[rvwAttributes] v,');
ADOQuery1.SQL.Add('     [Тяжмаш].[dbo].[vwAttrValues] e');
ADOQuery1.SQL.Add('where not exists ( SELECT 1 FROM [Тяжмаш].[dbo].[uit_vwTechProc] c,');
ADOQuery1.SQL.Add('                   [Тяжмаш].[dbo].[uit_ActiveTP] b');
ADOQuery1.SQL.Add('                   where b.idTP = c.idTP and active = 1');
ADOQuery1.SQL.Add('                   and a.idElm = c.idElm');
ADOQuery1.SQL.Add('                 )');
ADOQuery1.SQL.Add('  and a.idElm = b.inIdChild');
ADOQuery1.SQL.Add('  and b.inIdParent = c._ID and c._TYPE = '+QuotedStr('Маршрут'));
ADOQuery1.SQL.Add('  and c._ID =d.inIdParent and d.inIdTypeRel in ( SELECT inId FROM [Тяжмаш].[dbo].[vwTypesAndTypes]');
ADOQuery1.SQL.Add('                                                 where stParentType = '+QuotedStr('Маршрут')+' and stChildType <> '+QuotedStr('Элемент маршрута'));
ADOQuery1.SQL.Add('                                               )');
ADOQuery1.SQL.Add('  and d.inIdChild = p._ID');
ADOQuery1.SQL.Add('  and d.inIdChild = v.idversion and v.idattr = 2');
ADOQuery1.SQL.Add('  and a.idElm = e.inIdVersion and e.inIdAttribute = 162');
ADOQuery1.Active := True;

// Данные в ADOQuery1 до этого момента считаем уже сформированными
// Создаем новую копию Excel
   Excel := CreateOleObject('Excel.Application');

// Добавляем рабочую книгу
   Excel.Workbooks.Add;

// Устанавливаем размер массива с данными для экспорта
   FData:=VarArrayCreate([1,ADOQuery1.RecordCount+1,1,ADOQuery1.Fields.Count],varVariant);

// первую строку заполняем названиями столбцов
   for j:=1 to ADOQuery1.Fields.Count do
      FData[1,j]:=ADOQuery1.Fields[j-1].DisplayName;

// Заполняем массив
   ADOQuery1.First;i:=2;
   while not ADOQuery1.Eof do
      begin
         for j:=1 to ADOQuery1.Fields.Count do
            FData[i,j]:=ADOQuery1.Fields[j-1].Value;
         ADOQuery1.Next;i:=i+1;
      end;

// Копируем данные в Excel
   Excel.Range[Excel.Cells[1, 1], Excel.Cells[ADOQuery1.RecordCount+1, ADOQuery1.Fields.Count]].Value:=FData;

// Рисуем границы вокруг данных
   Excel.Range[Excel.Cells[1, 1], Excel.Cells[ADOQuery1.RecordCount+1, ADOQuery1.Fields.Count]].Select;
   Excel.Selection.Borders.LineStyle := 1;
   Excel.Selection.Borders.Weight := 2;
   Excel.Range[Excel.Cells[1, 1], Excel.Cells[1, 1]].Select;

// Меняем цвет ячеек в первой строке (названия стоблцов)
   Excel.Range[Excel.Cells[1, 1], Excel.Cells[1, ADOQuery1.Fields.Count]].Interior.ColorIndex:=16;

// Автоматически изменяем ширину столбцов и делаем Excel видимым
   Excel.Columns.AutoFit;
   Excel.Visible:=True;
end;
Из ADO компонентов использую ADOQuery, ADOConnection и DataSource. Пишу на Delphi XE2.

Последний раз редактировалось nactyx; 24.08.2015 в 16:18.
nactyx вне форума Ответить с цитированием
Старый 24.08.2015, 16:15   #16
nactyx
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 152
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
вы посмотрите на свой пост. Даже движок форума подсветил ошибку!
Если Вы про красный цвет - это моя работа, для удобства. Возможно неудачный цвет выбрал.

Цитата:
Сообщение от Аватар Посмотреть сообщение
Потому, что в строковой константе делфи каждая входящая кавычка должна дублироваться, иначе воспринимается компилятором как начало или конец константы. Всамой строке потом она не продублирована
Теперь понял, да.
nactyx вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
IdMultipartFormData и кириллица Delphi 2010 Shouldercannon Работа с сетью в Delphi 6 21.04.2013 21:00
SQL и кириллица GenniY БД в Delphi 11 01.11.2012 17:02
Создание новых таблиц в MS SQL SERVERE через SQL запрос в Delphi S_Yevgeniy Помощь студентам 1 27.10.2009 06:26