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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2017, 22:10   #1
Armageddets
Форумчанин
 
Регистрация: 30.06.2012
Сообщений: 145
По умолчанию При клике по БД открывать документ

Всем доброго времени суток, уважаемые эксперты. Передо мной стоит задача чтобы при клике по ячейке в БД запускать по ссылке, написанной в этой ячейке документ. У меня почему-то не работает. Таблица в БД.

Когда я пишу одним из этих способов - ничего не происходит:
Код:
  if (Column.FieldName='Ссылка на документ') 
and (DBGrid1.DataSource.DataSet.FieldByName('Ссылка на документ').AsString<>'') then 
  WinExec( 'C:\!!!.txt', SW_SHOWNORMAL);

  if (Column.FieldName='Ссылка на документ') 
and (DBGrid1.DataSource.DataSet.FieldByName('Ссылка на документ').AsString<>'') then
  ShellExecute(Handle,nil, PChar(DBGrid1.DataSource.DataSet.FieldByName('Ссылка на документ').AsString) ,nil,nil,SW_ShowNormal);
А если прописывать напрямую - тогда все запускается.
Код:
if (Column.FieldName='Ссылка на документ') 
and (DBGrid1.DataSource.DataSet.FieldByName('Ссылка на документ').AsString<>'') then
WinExec( 'C:\!!!.txt', SW_SHOWNORMAL);

if (Column.FieldName='Ссылка на документ') 
and (DBGrid1.DataSource.DataSet.FieldByName('Ссылка на документ').AsString<>'') then 
ShellExecute(Handle,nil, 'C:\!!!.txt' ,nil,nil,SW_ShowNormal);
Через точки прерывания - текст передается. Но почему-то не запускается документ. Может причина в типах Pchar и String? Кто знает как исправить данную проблему или запускать документ по ссылке из БД - подскажите, буду очень благодарен. Заранее всем спасибо.
Armageddets вне форума Ответить с цитированием
Старый 20.02.2017, 23:27   #2
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Замените
Код:
ShellExecute(Handle,nil...
на
Код:
ShellExecute(Handle,'open'...
kropotkina-alice вне форума Ответить с цитированием
Старый 21.02.2017, 00:32   #3
Armageddets
Форумчанин
 
Регистрация: 30.06.2012
Сообщений: 145
По умолчанию

К сожалению - результатов замена никаких не дала. Вот прилагаю сам исходник, может чем-то поможет:
Проект
Armageddets вне форума Ответить с цитированием
Старый 21.02.2017, 01:13   #4
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

А приведите-ка примеры ссылок на документы, которые у вас в таблице...
kropotkina-alice вне форума Ответить с цитированием
Старый 21.02.2017, 09:42   #5
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Что за Delphi у вас? В разных версиях могут быть проблемы в типах.

Можно попробовать так, должно работать
Код:
ShellExecute(Handle, 'open', 'notepad',
 PAnsiChar(DBGrid1.DataSource.DataSet.FieldByName('Ссылка на документ').AsString), nil, SW_ShowNormal);

Последний раз редактировалось Aliens_wolfs; 21.02.2017 в 09:48.
Aliens_wolfs вне форума Ответить с цитированием
Старый 21.02.2017, 10:53   #6
Armageddets
Форумчанин
 
Регистрация: 30.06.2012
Сообщений: 145
По умолчанию

Работаю с Delphi 7 на Windows XP.

Примеры ссылок:
C:\!!!.txt
C:\1.txt
D:\Documents\2012\office\New.doc
D:\Documents\New.doc

При использовании данного метода:
Код:
ShellExecute(Handle, 'open', 'notepad',
 PAnsiChar(DBGrid1.DataSource.DataSet.FieldByName('Ссылка на документ').AsString), nil, SW_ShowNormal);
Выскакивает ошибка "Системе не удается найти заданный путь" и открывается пустой блокнот. Хотя по заданному пути лежит файл
Armageddets вне форума Ответить с цитированием
Старый 21.02.2017, 11:25   #7
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Код:
ShellExecute(Handle, 'open', 'WINWORD',
 PAnsiChar(D:\Documents\2012\office\New.doc), nil, SW_ShowNormal);
Проверить еще нужно что в ссылке нет переноса символов и прочих символов обычно в конце строки бывают

Последний раз редактировалось Aliens_wolfs; 21.02.2017 в 11:45.
Aliens_wolfs вне форума Ответить с цитированием
Старый 21.02.2017, 12:20   #8
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Сообщение от Armageddets Посмотреть сообщение
Передо мной стоит задача чтобы при клике по ячейке в БД запускать по ссылке, написанной в этой ячейке документ.
А если в этом .txt файле много сток ? То есть тип поля VARCHAR(30) и .txt файле уже (Больше 30) на этого не надо думать ?

Цитата:
Сообщение от Aliens_wolfs Посмотреть сообщение
Что за Delphi у вас? В разных версиях могут быть проблемы в типах.
Можно попробовать так, должно работать

Код:
ShellExecute(Handle, 'open', 'notepad',
 PAnsiChar(DBGrid1.DataSource.DataSet.FieldByName('Ссылка на документ').AsString), nil, SW_ShowNormal);
На данный момент не имеет значения (версия Delphi)
xxbesoxx вне форума Ответить с цитированием
Старый 21.02.2017, 12:35   #9
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Цитата:
На данный момент не имеет значения (версия Delphi)
PChar в XE может не правильно вывести результат, в начале темы указанно в первом примере.

Цитата:
А если в этом .txt файле много сток ? То есть тип поля VARCHAR(30) и .txt файле уже (Больше 30) на этого не надо думать ?
у него проблема в корректном пути к файлу так как даже как я понял Word не открывает файл тот что в ссылке

Последний раз редактировалось Aliens_wolfs; 21.02.2017 в 13:03.
Aliens_wolfs вне форума Ответить с цитированием
Старый 21.02.2017, 19:58   #10
Armageddets
Форумчанин
 
Регистрация: 30.06.2012
Сообщений: 145
По умолчанию

Проверил наличие символов лишних в конце - вроде нет ничего (при стирании последнего симвода стрирается буква t):

Код:
  var s:String;

  S:=PChar( DBGrid1.DataSource.DataSet.FieldByName('Ссылка на документ').AsString );
  Delete(S,Length(S),1);

  if (Column.FieldName='Ссылка на документ')
  and (DBGrid1.DataSource.DataSet.FieldByName('Ссылка на документ').AsString<>'') then
  ShellExecute(Handle, 'open', 'notepad', PAnsiChar(S), nil, SW_ShowNormal);
Все равно не мог понять в чем дело. Когда указываешь вручную нужную строку - докуметы открываются, а когда из БД берется - ничего не происходит (запуск приложения срабатывает судя по точкам прерывания, а вот сам документ не открывается).

На счет длины текста в документе - если бы с этим были проблемы - то когда указываешь ссылку вручную - оно бы не запускалось по идее.
Armageddets вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выравнивание при клике maximamus HTML и CSS 0 04.08.2015 10:06
макрос, который будет открывать документ с расширением .csv в excel bri Microsoft Office Excel 2 10.03.2013 15:40
действие при клике на левую кн м. ahz4et Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 28.05.2011 18:46
Получить Х при клике по графику C# Скарам Помощь студентам 0 04.03.2010 19:52
Сортировка при клике на колонке mental БД в Delphi 6 23.12.2009 17:07