Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi (все версии) - часть 4

Автор: Cryogen2003
Дата сообщения: 24.06.2009 14:07
Добрый день.
Появилась проблема, на работе расширили список пользователей моего софта, но у них всех стоит OpenOffice и стало быть мой самописный в свое время компонент экспорта в excel не работает. Как быстро переписать так, чтобы у всех пользователей экспорт работал и было без разницы, стоит Microsoft Excel или OpenOffice.
Автор: f3ka
Дата сообщения: 24.06.2009 14:19
Cryogen2003
если на рубоарде нету темы по программированию для OpenOffice, то есть замечательная тема здесь...
а вообще я думаю что придется много чего переписывать, вот если бы файлы создавались напрямую без использования Excel (типа XLSReadWrite) то было проще в вашей ситуации...
Автор: Cryogen2003
Дата сообщения: 24.06.2009 14:23
f3ka
если к примеру воспользоваться что-то типа EMS Advanced Data Export Component Suite, то мне это поможет или нет? Там есть в принципе создание как XLS файлов, так и ODS файлов.

Хотя конечно хотелось бы без создания промежуточных файлов, так как есть много пользователей, которые сидят через удаленку и без любой возможности сохранения в файл чего-либо.
Автор: Grande
Дата сообщения: 25.06.2009 07:26
Добрый день, уважаемые знатоки.
Вот какая у меня неприятность случилась (Delphi7, PostgreSQL, ZeosBDO):
Прога заполняет БД всяческими инфами с обязательным указанием даты-времени. До некоторых пор все идет гладко. Но, вдруг, ни с того, ни с сего, сервер PostgreSQL возвращает ошибку о якобы недопустимом формате этой самой даты-времени. Я уже перед отправкой данных на сервер сохраняю (для проверки) эти данные в файл. Судя по записям в файле, формат даты-времени не изменился, но вот последняя запись не прокатывает
Не было ли у кого подобной траблы?
Не посоветуете ли чего?
Спасибо.
Автор: ShIvADeSt
Дата сообщения: 25.06.2009 07:31
Grande
Может на сервере поменялся формат даты. покажи кусок скрипта как пишешь в базу.
Автор: Grande
Дата сообщения: 25.06.2009 07:38
ShIvADeSt

Цитата:
Может на сервере поменялся формат даты

Перезапускаю прогу - опять все работает до какого-то момента, а потом опять ошибка.

Код:
qryTools.SQL.Text := 'insert into tools (frame, number, start, rsite_id, ' +
'alarm , mo)' + #13#10 + 'values (''' + Frame + ''', ''' + FaultNo + ''', ateTime' +
', ''' + RSite + ''', ''' + fType + ''', ''' + MO + ''');' + #13#10;
qryTools.ParamByName('DateTime').AsDateTime := StrToDateTime(FaultDate + ' ' + FaultTime);
Автор: f3ka
Дата сообщения: 25.06.2009 07:54
Grande
а для PostgreSQL не существует никакого родного софта для отслеживания запросов приходящих в базу? то что код формирует корректную строку не означает, что парсер запроса ZeosBDO корректно передает его в базу... вот именно пришедший запрос в базу как нибудь увидеть бы...
З.Ы. чтоб рожицы всякие не выскакивали - снимай галку "разрешить смайлики" при посте сообщения
Автор: Grande
Дата сообщения: 25.06.2009 07:56
f3ka
Дельная мысль, пошукаю сейчас что-либо подобное. Спасибо.
Автор: SIgor33
Дата сообщения: 25.06.2009 08:13
Grande

Цитата:
qryTools.ParamByName('DateTime').AsDateTime := StrToDateTime(FaultDate + ' ' + FaultTime);

А где у тебя параметр что я его невижую. Вызов его вижу а запросе нет

Автор: f3ka
Дата сообщения: 25.06.2009 08:16
SIgor33

Цитата:
qryTools.SQL.Text := 'insert into tools (frame, number, start, rsite_id, ' +
'alarm , mo)' + #13#10 + 'values (''' + Frame + ''', ''' + FaultNo + ''', :DateTime' +
', ''' + RSite + ''', ''' + fType + ''', ''' + MO + ''');' + #13#10;
qryTools.ParamByName('DateTime').AsDateTime := StrToDateTime(FaultDate + ' ' + FaultTime);

и P.S. тоже читать надо

Цитата:
PS. Какая-то мордашка вылезла в коде
Там должно быть : D

Автор: Grande
Дата сообщения: 25.06.2009 08:32
SIgor33
А там, где морда ухмыляющаяся

Добавлено:
f3ka
Есть, оказывается, журналирование запросов.
Пойду, поэкспериментирую. О результатах доложу
Спасибо за наводку.
Автор: volser
Дата сообщения: 25.06.2009 10:45
Grande

Что бы не было никаких проблем с преобразованиями данных на сервере, всегда нужно использовать параметры. Тогда не будет проблем ни с запятой в числах ни с кавычкой в строках, ни с форматом дат.
Автор: f3ka
Дата сообщения: 25.06.2009 10:50
volser

Цитата:
qryTools.ParamByName('DateTime').AsDateTime := StrToDateTime(FaultDate + ' ' + FaultTime);

вы вот это видите???
Grande
тут может быть только другая проблема в то что где то в другом месте запроса возникает например лишняя запятая или кавычка...
З.Ы. а вообще использование параметров вместо динамического формирования строки чаще всего помогает решить проблему некорректных запросов...
Автор: volser
Дата сообщения: 25.06.2009 11:10
f3ka

Да я видел. Я имел в виде что что это


Цитата:
qryTools.SQL.Text := 'insert into tools (frame, number, start, rsite_id, ' +
'alarm , mo)' + #13#10 + 'values (''' + Frame + ''', ''' + FaultNo + ''', ateTime' +
', ''' + RSite + ''', ''' + fType + ''', ''' + MO + ''');' + #13#10;
qryTools.ParamByName('DateTime').AsDateTime := StrToDateTime(FaultDate + ' ' + FaultTime);


нужно все переписать через параметры и отказаться от динамического формирования строки, как то так


Код:
'insert into tools (frame, number, start, rsite_id, alarm , mo)' + #13#10 +
'values (:frame, :number, :start, :rsite_id, :alarm , :mo)';
Автор: greenpc
Дата сообщения: 25.06.2009 12:18
f3ka
volser
имхо в свое время было замечено что нужно передавать параметрами
даты-время, float c дробной частью( что в прицепе и является дата-время) и строку (пример:у меня вылетало при 3х кавычках в строке. не верная строка sql - если дампом посмотреть то так и есть )
остальное вроде всеравно т.е. сила привычки
Автор: scroollocker
Дата сообщения: 25.06.2009 13:23
Здравствуйте, уважаемые профессионалы!
У меня возникла проблема с закачкой файла на ФТП
после нажатия кнопки, возникает ошибка:" Access violation at address 0040921A'"
Помогите разобраться, я начинающий кодер и мне сложно!
Пожалуйста!
вот приведу код програмы:

Код:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, jpeg, ExtCtrls, wininet, Mask, ComCtrls;

var
conn_param,inet_open : hinternet;
AboutPC, ftpfilename, filename:pchar;
port: integer;
procedure TForm1.Button1Click(Sender: TObject);
begin
Port:=21;
GetMem(AboutPC,100); //выделил память
AboutPC:=Pchar('любая String строка.txt'); //перевел cтринг в Пчар
filename:='C:\Info_.txt';
ftpfilename:='/test/Info_';
strcat(ftpfilename,AboutPC); //добавил в конец фтпфайлнэйм - ЭбаутПиСи
inet_open := internetopen('iexplore',INTERNET_OPEN_TYPE_DIRECT, nil,nil,0);
conn_param := internetconnect(inet_open,'ftp.ru',port,'Name','Pass',INTERNET_SERVICE_FTP,INTERNET_FLAG_PASSIVE,0);
sleep(100);
ftpputfile(conn_param,filename,ftpfilename,FTP_TRANSFER_TYPE_UNKNOWN,0);
internetclosehandle(conn_param);
internetclosehandle(inet_open) ;
if true then
showmessage('Good');
end;
end.
Автор: volser
Дата сообщения: 25.06.2009 13:28
scroollocker
На какой строке вылетает ошибка?

Добавлено:
Не умеешь работать с PChar работай со строками.


Код:
var
conn_param,inet_open : hinternet;
AboutPC, ftpfilename, filename: string;
port: integer;

procedure TForm1.Button1Click(Sender: TObject);
begin
Port := 21;
AboutPC := 'любая String строка.txt'; //перевел cтринг в Пчар
filename := 'C:\Info_.txt';
ftpfilename := '/test/Info_';
ftpfilename := ftpfilename + AboutPC;
inet_open := internetopen('iexplore',INTERNET_OPEN_TYPE_DIRECT, nil,nil,0);
conn_param := internetconnect(inet_open,'ftp.ru',port,'Name','Pass',INTERNET_SERVICE_FTP,INTERNET_FLAG_PASSIVE,0);
sleep(100);
ftpputfile(conn_param,PChar(filename),PChar(ftpfilename),FTP_TRANSFER_TYPE_UNKNOWN,0);
internetclosehandle(conn_param);
internetclosehandle(inet_open) ;
if true then
showmessage('Good');
end;

Автор: scroollocker
Дата сообщения: 25.06.2009 15:46
volser

Большое человеческое Спасибо!

Автор: gogaman
Дата сообщения: 26.06.2009 12:23
помогите решить задачу
задачка вроде простая но для меня оказалась трудно решима (нет опыта)
вобщем скачал я делфи 2009
задача: форма и 2 кнопки которые запускают 2 ехе файла вшытых в ехе
путем тыка вот что получилось

Код: unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ShellApi;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
StaticText1: TStaticText;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
RS : TResourceStream;
begin
RS := TResourceStream.Create(Hinstance, 'Resource_1', RT_RCData);
ShellExecute(Handle, 'open', '1.exe', nil, nil, SW_SHOWNORMAL);
RS.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
RS : TResourceStream;
begin
RS := TResourceStream.Create(Hinstance, 'Resource_2', RT_RCData);
ShellExecute(Handle, 'open', '2.exe', nil, nil, SW_SHOWNORMAL);
RS.Free;
end;

end.
Автор: volser
Дата сообщения: 26.06.2009 12:28
Сохрани файл на диск потом запускай его.
Автор: Grande
Дата сообщения: 26.06.2009 12:53
Нельзя ли, уважаемые знатоки, задать еще вопрос?
Суть его такова: имеется экземпляр TQuery. Вызываем его метод Open. А как узнать, когда сей запрос выполнился?
Спасибо.
(Delphi7, PostgreSQL, ZeosBDO).
Автор: volser
Дата сообщения: 26.06.2009 12:56
Событие компонента AfterOpen.
Автор: Grande
Дата сообщения: 26.06.2009 13:01
volser
Это событие, как я понимаю, наступает после открытия запроса, независимо от того, выполнился он, или нет. Или я неправ?
Автор: volser
Дата сообщения: 26.06.2009 13:10
Grande

Тогда я не совсем понимаю, что значит не выполнился запрос?
Автор: gogaman
Дата сообщения: 26.06.2009 13:13
volser
а как ето реализовать и желательно чтоб потом удалять файлы сохраненые

вобщемто ети ехе ето бантики собраные в исполняемый
1 копирует 2 файла в system32, добавляет запись в реестр и 1 файл инсталить наверно (в бантике zapusk.exe /install)
2 бантик соответсвено все ето удаляет
вот решил собрать ето в кучу чтоб был 1 файл
Автор: volser
Дата сообщения: 26.06.2009 13:20
gogaman

Как то так

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
RS: TResourceStream;
M: TMemoryStream;
AFileName: String;
begin
RS := TResourceStream.Create(Hinstance, 'Resource_1', RT_RCData);
try
M := TMemoryStream.Create;
try
M.LoadFromStream(RS);
AFileName := '1.exe';
M.SaveToFile(AFileName);
ShellExecute(Handle, 'open', PChar(AFileName), nil, nil, SW_SHOWNORMAL);
finally
M.Free;
end;
finally
RS.Free;
end;
end;
Автор: Grande
Дата сообщения: 26.06.2009 13:24
volser

Цитата:
Тогда я не совсем понимаю, что значит не выполнился запрос?

После отправки запроса на сервер и до его выполнения проходит какое-то время. А как выяснить, что данные уже внесены в базу (либо данные изменены)?
Автор: greenpc
Дата сообщения: 26.06.2009 13:25
Grande
думаю Query.active =true
хотя AfterOpen - Occurs after an application completes opening a dataset and before any data access occurs.
Автор: Grande
Дата сообщения: 26.06.2009 13:30
greenpc
Имеете в виду
Код: while Query.active =true ?
Автор: volser
Дата сообщения: 26.06.2009 13:31
Grande

А у вас что асинхронный вызов идет? Если нет, то все команды идут по очереди.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Глобальные переменные в разных формах с++ builder 'a.


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.