IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   Delphi,Access... (http://www.imho.ws/showthread.php?t=99054)

kilroy 25.01.2006 17:20

Delphi,Access...
 
значит для начала немного опишу прогу....
Называецо защищенный докуметооборот...аля клиент,сервер.В котором имеецо БД(Access).
Скрестил ацес и дельфи.delphi v7,Access 2003.через ADO.
Вот собстевнно и начались проблемы....
1ая - он почему то совсем не отображет свойства полей,маски и т.д.Просто тупая таблица с добавлением,изменением,удалением.
ну дык это еще цветочки...
2ая - для чего собсно нужно БД?!...Вот,прога должна сканить допустим из такой то директории документы и заносить их в БД.
как енто организовать?При чем она должна в себя занисить дату последнего изменения,владелец документа....и месторасположение документа.
(кто чего не понял...спрашивайте!)

AZBuka 25.01.2006 17:40

1.
Ты хочешь, чтобы через ADO можно было еще и в конструктор таблицы входить ? Могу ошибиться, но это вряд ли. Сходи на www.delphikingdom.ru может кто что подскажет. Хотя мне не совсем понятно зачем клиенту иметь доступ к свойствам таблицы ?!
2.
Слишком расплывчато поставлена задача. В каком виде исходные документы ? Как происходит сканирование: автоматом, принудительно ? Какова структура таблиц Access ?
Вопросов много, а потому прогу надо самому начинать кропать и вопросы задавать по КОНКРЕТНЫМ проблемам.
Удачи !

ЕЖ 25.01.2006 18:12

kilroy
Для сканировния файлов каталога смотри в хэлпе функции FindFirst, FindNext - там есть пример использования.

kilroy 25.01.2006 18:18

Уря....токо что решил первую проблему.... :cool:
Документы-word,excel...
Скан происходит атоматически.Ну указываешь что из этой паки через каждые 30 сек сканить документы.для начала хотелось бы что бы она просто в сибя заносила имя документа и что-то типо сцылки где он храница.вапще как сделать так чтобы она вносила в себя сама автоматом что то...
(вапще я тыщу лет не програмил,точнее 3 года.вот теперь начали напрягать...поэтому я мог чего то забыть...и вполне возможно не понимать некоторых вопросов).
kilroystudio.narod.ru/ado.rar если интересно глянь.(login - Admin pas -"пустой")

ну вот допустим просканировал,нашел он.а куда он их запишет.надо чтобы в БД....все равно СПАСИБО!!!ща глянем....

ЕЖ 25.01.2006 18:28

Цитата:

kilroy:
ну вот допустим просканировал,нашел он.а куда он их запишет.надо чтобы в БД....все равно СПАСИБО!!!ща глянем....
Ну ты странный, не "он" должен записывать то что нашел, а ты это должен прописать. Имя файла у тебя в цикле будет найдено, путь ты знаешь, вот и добавляй это всё в свою таблицу БД.

kilroy 25.01.2006 18:38

т.е. добавляй???
она(прога) должна быть автоматизированна.
то что надо написать код я уже понял.
допустим две кнопочки.1ая - обзор каталога откуда сканить,2ая - сам скан + внесение информации в БД(либо можно и разделить скан и внесение в БД).я так это понимаю... :confused: .....
так вот.первую кнопочку(обзор) я сделал.Что писать во второй...
что типо.берем название файла и вписываем его в первое поле первого столбца...так что ли....
не совсем догоняю алгоритм... :help:

GOre01 25.01.2006 19:06

По первой кнопке тебе надо составить список файлов в отсканированной папке. А по второй кнопке, используя список, занести файлы БД. Или же. По первой кнопке просто указываешь каталог, где лежат файлы, а по второй объединяешь поиск с одновременным занесением найденного.

ЕЖ 25.01.2006 19:06

kilroy
Ты всё правильно описал, смотри хелп и примеры по командам которые я указал. Сканирование файлов каталога организуется в цикле, пихай его на вторую кнопку. Когда писать в БД - в цикле или потом - решай сам, но видимо стоит ещё и делать проверку: нет ли уже в БД информации об этом файле. Вообще алгоритм ты сам придумываешь, что когда и как делать...

kilroy 25.01.2006 22:38

Хмммм....будем думать.....ВСЕМ СПАСИБО!!!
(тему пока не закрывайте)

Novoross 30.01.2006 13:19

[QUOTE=kilroy]Ну указываешь что из этой паки через каждые 30 сек сканить документы.для начала хотелось бы что бы она просто в сибя заносила имя документа и что-то типо сцылки где он храница.QUOTE]

Я так понимаю, что у тебя в базе всего одна таблица с двумя полями?! первое поле-путь каталога, в котором происходит поиск(например C:\MyFolder),второе поле-имя файла. Если кнопку под названием Обзор ты сделал и прописал код для выбора каталога, то путь к папке у тебя уже есть, соответственно первое поле из таблицы заполнить уже можешь, осталось только второе - сканирование ЕЖ уже сказал как это сделать......Да, если понадобиться проверка нет ли такой записи уже в базе, то мой тебе совет, объединить оба твоих поля в первичный ключ!!!

kilroy 30.01.2006 21:26

Неа...
Блин жопа че то никак не могу замутить все это...
"Я так понимаю, что у тебя в базе всего одна таблица с двумя полями?!"
Нет.БД больше.Та таблица которая отвечает за файло(документы) там есть много чего... kilroystudio.narod.ru/ado.rar если интересно глянь.(login - Admin pas -"пустой") (проект должен лежать в C:\ado )(как указать путь к БД с самого начала...а не прописывать его в создании..?)
Вот....потому что я такой меготупой плиз помогите...
Вот сначало мы разберем кнопочку "обзор".
Надо что бы она выдавала как бы типо обзора всех папок и еще чтобы можно было бы в этом обзоре просматривать сетевое окруджение.
+что бы можно было указывать не одну папку(для начала хотя бы одну).
ну вот там указали из какой папки считывать(сканить) файло,далее он делает список этот,например создет его в тхт.а вообще желательно чтобы он делал его в самой проге где список создавал и работал с ним.(нужна еще безопастность).Вот можно было бы что бы он сделала сразу полдный список т.е. имя файла,тип файла,дата создания и изменения...а потом просто тупо заносил бы их в бд.
При чем я думаю что делать цикл не надо(во второй кнопке).
просто при совпадении имени файла он бы заменял его.
уфффф.....голова опухает :confused:
Плиз :help: ми!Я покланаяюсь Вам :молись: !

ЕЖ 31.01.2006 01:38

Самый простой вариант для выбора папки
PHP код:

uses FileCtrl;
var
   
Dirstring='';
begin
  
if SelectDirectory('текст'''Dirthen
    Edit1
.Text:=Dir;
end

Либо вот Unit реализации диалога выбора папки, который напрямую обращается к API функции SHBrowseForFolder (SelectDirectory тоже её пользует). Тут функция BrowseFolder будет возвращать тебе путь к выбранной папке
PHP код:

unit SHBrowseFolder;
interface

  
Uses WindowsSysUtils;

  Function 
BrowseFolder(aWndOwnerTHandleaTitleStringFromPathString ''): String;

implementation

  Uses ActiveX
ShlObj;
  Var 
fSHMallocIMalloc Nil;

    Function 
BrowseCallbackProc(ahwndHWNDuMsgUINTalParamlpDataLPARAM): integerStdCall;
    
Begin
      
If uMsg BFFM_INITIALIZED Then
        PostMessage
(ahwndBFFM_SETSELECTIONDWORD(True), DWORD(lpData));
      
Result := 0;
    
End;

  Function 
BrowseFolder(aWndOwnerTHandleaTitleStringFromPathString ''): String;
  Var
    
anInfoTBrowseInfo;
    
aResultPItemIDList;
  
Begin
    ZeroMemory
(@anInfoSizeOf(anInfo));
    
anInfo.hwndOwner := aWndOwner;
    
anInfo.lpszTitle := PChar(aTitle);
    
anInfo.ulFlags := BIF_RETURNONLYFSDIRS;
    If 
FromPath <> '' Then
    Begin
      anInfo
.lpfn := @BrowseCallbackProc;
      
anInfo.lParam := DWORD(PChar(FromPath));
    
End;
    
aResult := SHBrowseForFolder(anInfo);
    If 
aResult Nil Then Abort;
    Try
      
SetLength(ResultMAX_PATH);
      
Win32Check(SHGetPathFromIDList(aResultPChar(Result)));
      
SetLength(ResultStrLen(PChar(Result)));
    
Finally
      fSHMalloc
.Free(aResult);
    
End;
  
End;

Initialization
  Win32Check
(SHGetMalloc(fSHMalloc) = NOERROR);

Finalization
  
If fSHMalloc <> Nil Then
    fSHMalloc
._Release;
end


kilroy 31.01.2006 21:29

Пасибо БОЛЬШОЕ!Токо код то на пхп.а я то на дельфи пишу.или одинаково.лана щас попробуем... :)

С кодом не особо разобралсо.Но появились идейки.
Написать в кнопке Обзор:
TOpenDialog (http://www.sources.ru/delphi/delphi_..._for_all.shtml) использовать вот такой компонент + FindFirst(FindNext) или мож FindDialog1.

procedure TForm1.Button1Click(Sender: TObject);

var
sr: TSearchRec;
FileAttrs: Integer;
begin
StringGrid1.RowCount := 1;
if CheckBox1.Checked then
FileAttrs := faReadOnly
else
FileAttrs := 0;
if CheckBox2.Checked then
FileAttrs := FileAttrs + faHidden;
if CheckBox3.Checked then
FileAttrs := FileAttrs + faSysFile;
if CheckBox4.Checked then
FileAttrs := FileAttrs + faVolumeID;
if CheckBox5.Checked then

FileAttrs := FileAttrs + faDirectory;
if CheckBox6.Checked then
FileAttrs := FileAttrs + faArchive;
if CheckBox7.Checked then

FileAttrs := FileAttrs + faAnyFile;

with StringGrid1 do
begin
RowCount := 0;

if FindFirst(Edit1.Text, FileAttrs, sr) = 0 then

begin
repeat
if (sr.Attr and FileAttrs) = sr.Attr then
begin
RowCount := RowCount + 1;
Cells[1,RowCount-1] := sr.Name;
Cells[2,RowCount-1] := IntToStr(sr.Size);
end;
until FindNext(sr) <> 0;
FindClose(sr);
end;
end;
end;
вот....токо надо как то замутить без атрибутов файлов.+ чтобы сканил в указанной директории и записывал куда нить список файлов.

kilroy 31.01.2006 23:17

kilroystudio.narod.ru/ado.rar обновил.
хм...Вот ...
1ое надо чтобы при нажатии на кнопочку обзор выбиралась именно папка а не файл.
2ое надо как нить замутить чтобы из stringgrid данные записывались в dbgrid либо чтобы они сразу писались в dbgrid....
вот....мдя... :hmm3:

kilroy 03.02.2006 22:30

а как убрать из списка фалов расширение фалов?

ЕЖ 04.02.2006 01:18

kilroy
Это был не PHP-код, а Delphi, просто я его оформил в PHP-тэг чтобы была подсветка синтаксиса :) Так что используй его для выбора папки, а не TOpenDialog.

Далее... DBGrid работает с DataSet - а это либо твоя БД, либо есть компоненты для размещения DataSet просто в памяти без БД (так называемые MemoryDataSet). Но тебе думаю имеет смысл писать прямо в БД, т.к. это тебе вроде и надо.

Про расширения - в Delphi есть целый набор функций для работы со строками, содержащие пути/именами_файлов. В частности ExtractFileName/ExtractFileExt - посмотри в Help, а заодно другие функции из этого юнита.

kilroy 04.02.2006 15:07

Мля...я совсем отупел :biggrin:
"Далее... DBGrid работает с DataSet - а это либо твоя БД, либо есть компоненты для размещения DataSet просто в памяти без БД (так называемые MemoryDataSet). Но тебе думаю имеет смысл писать прямо в БД, т.к. это тебе вроде и надо."
Не воткнул.Ты что имеешь ввиду???
Мне нужно в БД занести имя файла,и сцылку на него.
Ты скачай мою прогу и посмотри...так нагляднее будет=)

ЕЖ 05.02.2006 20:20

kilroy
Ну глянул я на твою прогу... и чего? Надо тебе в БД заносить имена файлов, так и заноси - зачем тебе для этого StringGrid? Совершенно не понятен твой уровень знаний про работу с БД в Delphi...

Ты написал
Цитата:

kilroy:
надо как нить замутить чтобы из stringgrid данные записывались в dbgrid либо чтобы они сразу писались в dbgrid....
В DBGrid данные не пишутся, DBGrid только отображает данные DataSet (либо результат запроса, либо таблица БД). Хочешь добавалять в DataSet - пиши для связанного с гридой DataSet команды Append...заполнение_полей...Post. Это ты знаешь?

kilroy 06.02.2006 13:01

Вау!!! :)
Незнаю.....
Попобробнее плиз! :)

ЕЖ 06.02.2006 13:16

Цитата:

kilroy:
Вау!!! :)
Незнаю.....
Тогда рановато ты схватилась за разработку, сначала скачай, например, эту книжку и почитай...
http://imho.ws/showpost.php?p=1039565&postcount=1530

iam_xor 07.02.2006 04:46

учить матчасть!

kilroy 07.02.2006 21:51

Я все понимаю...книгу скачал,буду потехоньку изучать...у мя и так всех этих книг тьма тьмуща...Может со мной и не охото возицо...но дело в том что время ограниченно...мне так сказать нужно либо пройти мего курс бысторого обучения по связке дельфи и ацес...либо дальше помогать...поэтому и говорил что я в ваших руках...

kilroy 08.02.2006 16:59

procedure TForm1.Button1Click(Sender: TObject);

begin
SampleTable.Append;
SampleTable.FieldValues['ALPHANUMERIC'] := Edit1.text;
SampleTable.FieldValues['INTEGER'] := StrToInt(Edit2.text);
SampleTable.Post;
end;
ЕЖ
ты вот это имел ввиду???...
вот сделал выбор дериктории правдо не так как ты написал...потому что не понял я некоторые детали...Вот а еще конежно хотелось бы сделать выбор дерикторий и из сетевого окружения.
вот обновленная версия kilroystudio.narod.ru/ado.rar

kilroy 15.02.2006 22:08

хмм....ни кто не поможет? :help: :help: :help:

kilroy 02.03.2006 01:10

Код:


procedure TForm1.Button8Click(Sender: TObject);
begin
  With ADOTable1 do
 begin
 Open;
 First;
 Edit;
 FieldByName('imya').AsString :=Label1.Caption;


Post;

вот этот код надо как то привратить вот в этот

Код:


begin
 stringGrid1.RowCount := 0;


    FileAttrs := FileAttrs + faAnyFile;

  with stringGrid1 do
  begin
    RowCount := 1;
    dir:=  Label1.Caption;
    if FindFirst( dir+'\*.txt',  FileAttrs, sr) =0

      then

    begin
      repeat
        if (sr.Attr and FileAttrs) = sr.Attr then
        begin
        RowCount := RowCount + 1;
        Cells[0,RowCount-1] := sr.name;
        Cells[1,RowCount-1] := IntToStr(sr.size);
        Cells[2,RowCount-1] := IntToStr(sr.time);
        Cells[3,RowCount-1] := Label1.Caption +sr.name;
        end;
      until FindNext(sr) <> 0;
      FindClose(sr);
      end;

Т.е. тоже сделать цикл...чтоб данные записывались не в StringGrid1 а сразу непосредственно в БД(Access).


Часовой пояс GMT +4, время: 20:28.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.