2010-06-07 3 views
0

IniFile을 사용하여 로컬 또는 원격 데이터베이스를 여는 방법. 다음과 같습니다.initfile로 데이터베이스 열기

vBanco : String; 
    IniFileName : TIniFile; 
begin 
    IniFileName := TIniFile.Create(ExtractFilePath(ParamStr(0))+FileName); 
    Try 
     if FileExists (remote+'db\ado.mdb') then 
     begin 

       vBanco := Trim(IniFileName.ReadString('acesso','BancoRemto','')); 
       Dirlocal := Trim(IniFileName.ReadString('acesso','PastasRemto','')); 
       frmPrincipal.Edit1.text := Dirlocal; 
       Dirtrabalho := (ExtractFilePath(Application.ExeName)); 

       Conection.ConnectionString := vBanco; 
     end 
     else 
     begin 
      Try 
       vBanco := Trim(IniFileName.ReadString('acesso','banco','')); 
       Dirlocal := Trim(IniFileName.ReadString('acesso','PastasLocais','')); 
       frmPrincipal.Edit1.text := Dirlocal; 
       Dirtrabalho := (ExtractFilePath(Application.ExeName)); 
      Finally 
      end; 
     end; 
    Finally 
     IniFileName.Free; 
    end; 
end; 
+1

INI 파일은 열지 데이터베이스를 않습니다. 당신은 실제로 무엇을하려고합니까? 이 코드 중 귀하의 질문과 관련된 부분은 무엇입니까? * 관련성이없는 코드를 제거 할 수 있습니까? –

+0

@ml : 귀하의 프로필에 따르면, 지금까지 7 가지 질문을했으며 5 가지 답변을 얻었으며 답을 수락하지 않았습니다. 여기 StackOverflow에서 정중 한 것으로 간주되어 승인 된대로 좋은 답변을 표시합니다 (투표 위젯 아래의 확인란 아이콘 클릭). 그래서 나머지 사용자는 만족스러운 답변을 찾았습니다. –

+0

Rob and Mason : 요청하지 않은 댓글을 용서해주세요.하지만 두 사람이이 포럼에 추가 한 편집 내용은 다른 사람들이 여기에서 찾을 수있는 정보의 질을 크게 향상시킵니다. 계속 시간을 어떻게 찾을지는 모르겠지만, RSS 집계 기의 StackOverflow에서 "Delphi 태그가있는 질문"을 매일 따르는 것이 주된 이유 중 하나입니다. 경찰이 되는게 쉽지 않은 걸 알아. 위대한 업적을 가져 주셔서 감사합니다. – jrodenhi

답변

1

문제가 발생하면 올바른 코드가있는 것 같습니다. INI 연결 문자열의 값이 올바른지 확인하십시오. 유효한 연결 문자열을 얻는 좋은 방법은 디자인 타임에 연결을 설정 한 다음 복사하여 구성 파일에 붙여 넣는 것입니다.

+0

문제는 : if FileExists); doesen't는 일하는 것처럼 보인다 !!!!!!!! Thank's –

+0

FileExists는 INI 파일과 전혀 관련이없는 함수입니다. FileExists가 문제라면, 질문에있는 유일한 단어는 INI 파일에 관한 것입니다. "작동하지 않는 것"이 ​​실제로 무엇을 의미하는지에 대해 좀 더 구체적으로 설명해 주실 수 있습니까? –

0

FileExists에 문제가있는 경우 다음과 같이 추적합니다.

if FileExists 줄에 중단 점을 넣습니다. 디버거가 깨지면 CTRL-F7을 누르면 Evaluate/Modify 대화 상자가 나타납니다. 입력란에 remote+'db\ado.mdb'을 입력하고 입력 내용을 확인하십시오. 그것은 아마도 당신에게 나쁜 파일 이름을 줄 것입니다. remote 백 슬래시로 끝나지 않는 경우

예를 들어, 그것은 잘못된 경로를 얻을 것입니다. 이 문제는 IncludeTrailingPathDelimiter 함수를 사용하여 수정할 수 있습니다. 코드를 더 이상 보지 않아도 되기는 어려울 지 모르지만 내 경험에 따르면 그럴 것입니다.

0

내 실수를 발견했습니다. 글로벌 변수 remote에 기반한 디렉토리에서 "ado.mdb"라는 파일의 존재 여부를 확인하는 대신 INI에서 읽은 값에 의해 결정된 디렉토리에서 "base_dados.mdb"라는 파일을 찾아야했습니다 파일.

procedure TfrmDados.ConectionBeforeConnect(Sender: TObject); 
const 
    FileName = 'config.ini'; 
var 
    vBanco : String; 
    IniFileName : TIniFile; 
    LBasedados : String; 
begin 
    IniFileName := TIniFile.Create(ExtractFilePath(ParamStr(0))+FileName); 

    vBanco := Trim(IniFileName.ReadString('acesso','BDtrabalho','')); 
    Dirlocal := Trim(IniFileName.ReadString('acesso','Pastrabalho','')); 
    LBasedados := Dirlocal+'db\base_dados.mdb'; 
    frmPrincipal.Edit1.text := Dirlocal; 
    Dirtrabalho := (ExtractFilePath(Application.ExeName)); 
    if FileExists(LBasedados) then 
    Conection.ConnectionString := vBanco 
    else 
    begin 
    Application.MessageBox('Bade dados do servidor não encontrada vai trabalhar neste Computador!','Ligação Remota FALHOU'); 
    vBanco := Trim(IniFileName.ReadString('acesso','BD_local','')); 
    Dirlocal := Trim(IniFileName.ReadString('acesso','Pasta_local','')); 
    frmPrincipal.Edit1.text := Dirlocal; 
    Dirtrabalho := (ExtractFilePath(Application.ExeName)); 
    Conection.ConnectionString := vBanco; 
    end; 

    IniFileName.Free; 
end; 
+0

근본적인 문제는 프로그램이 어떻게 작동해야하는지 이해하지 못했기 때문에 INI 파일이나 FileExists와 관련된 문제가 있다고 결론 내었습니다. 다음 번에는 먼저 목표를 이해했는지 확인하십시오. –

관련 문제