Plusieurs petites questions et demande de fonction sur Delphi

Plusieurs petites questions et demande de fonction sur Delphi - Delphi/Pascal - Programmation

Marsh Posté le 10-12-2002 à 07:51:23    

Je me pose certaines questions sur Delphi... vous pouvez surement m'aider !
 
1. Comment on concatène 2 chaînes de caractères ? ( strcat c'est dla belle merdouille qui fonctionne avec des PChar )
 
2. Pour linker une base de données... y'aurait pas un moyen de faire comme en VB : application.path & 'database.mdb'; ?
 
3. Comment on fait pour faire une ConnexionString pour une base de données avec ça ?

Code :
  1. Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=F:\Compilation CD 2002\cd.mdb;Mode=ReadWrite;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False

???
 
4. Comment savoir le nom (label ) du CD dans le lecteur ?
5. Comment détecter les lecteurs de CD-Rom ?
6. Si je veux faire des requêtes SQL à ma BD, j'ai seulement besoin d'un ADOQuery ? ( En spécifiant la ConnexionString dans le code si je peux y arriver... )
7. Il y a un équivalent à "DoEvent" ?

Reply

Marsh Posté le 10-12-2002 à 07:51:23   

Reply

Marsh Posté le 10-12-2002 à 10:06:11    

1.  chaine3 := chaine1 + chaine2;
 
2. ExtractFilePath(Application.ExeName) + 'database.mdb' :??:
 
3.


ConnectString := Format('Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=%s%s;Mode=ReadWrite;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False', [chemin, nomBD]);


 
4. je sais plus :D GetVolumeInformation probablement
 
5. Y a GetDriveType qui donne le type, doit y avoir une fonction qui liste les lecteurs existants aussi
 
6. Je mets un TADOConnection, je lui spécifie le ConnecionString à utiliser, puis j'y lie un TADOQuery, ça suffit
 
7. Application.ProcessMessages; et Application.HandleMessage; (le premier bouffera 100% de CPU dans une boucle où y a que ça, mais le second sera peut-être moins "temps réel", faut tester les deux donc)


Message édité par antp le 10-12-2002 à 10:06:31

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 10-12-2002 à 10:40:15    

exact pour le 4... la preuve par google  :D  
 
http://greatis.com/delphi/drives-cdlabel.html

Reply

Marsh Posté le 10-12-2002 à 13:53:28    

Ooouhhh... vous avez combien d'années d'expériences pour rire ? :) Vous êtes vraiment trop bon. ( Quel âge aussi ? )
 
:jap:

Reply

Marsh Posté le 10-12-2002 à 14:24:54    

22 ans, j'ai découvert Delphi à l'école il y a presque 3 ans
Avant ça j'avais déjà un peu utilisé C++Builder et appris le C/C++ avant.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 10-12-2002 à 14:25:52    

:ouch:  ... tout de même hot ! :)

Reply

Marsh Posté le 10-12-2002 à 15:46:39    

On ne peut pas faire d'array pour une fonction ? Ça me serait grandement utile...
 
function GetCDLetter: array[0..25] of string; stdcall;
var
  N: Byte;
  Drv: string;
  Drives: set of 0..25;
begin
  Integer(Drives):=GetLogicalDrives;
  for N:=0 to 25 do
    if N in Drives then
    begin
      Drv:=Char(N+Ord('A';))+':\';
      if(GetDriveType(PChar(Drv))=5) then
      begin
          GetCDLetter[n] := Drv;
//        Result:=Drv;
//        Exit;
      end;
    end;
end;
 
function GetCDLabel(Drive: string): string; stdcall;
var
  VolumeName: array[0..255] of Char;
  FileSystemType: array[0..255] of Char;
  SerialNum: DWORD;
  MaxFilenameLength: DWORD;
  Flags: DWORD;
begin
  if (GetVolumeInformation(
    PChar(Drive),
    VolumeName,
    256,
    @SerialNum,
    MaxFilenameLength,
    Flags,
    FileSystemType,
    256)) then Result:=VolumeName
  else Result:='No CD Present';
end;

Reply

Marsh Posté le 10-12-2002 à 15:47:22    

On ne peut pas faire d'array pour une fonction ? Ça me serait grandement utile...
 
function GetCDLetter: array[0..25] of string; stdcall;
var
  N: Byte;
  Drv: string;
  Drives: set of 0..25;
begin
  Integer(Drives):=GetLogicalDrives;
  for N:=0 to 25 do
    if N in Drives then
    begin
      Drv:=Char(N+Ord('A';))+':\';
      if(GetDriveType(PChar(Drv))=5) then
      begin
      GetCDLetter[n] := Drv
//        Result:=Drv;
//        Exit;
      end;
    end;
end;
 
function GetCDLabel(Drive: string): string; stdcall;
var
  VolumeName: array[0..255] of Char;
  FileSystemType: array[0..255] of Char;
  SerialNum: DWORD;
  MaxFilenameLength: DWORD;
  Flags: DWORD;
begin
  if (GetVolumeInformation(
    PChar(Drive),
    VolumeName,
    256,
    @SerialNum,
    MaxFilenameLength,
    Flags,
    FileSystemType,
    256)) then Result:=VolumeName
  else Result:='No CD Present';
end;


Message édité par Un4GivN le 10-12-2002 à 15:48:11
Reply

Marsh Posté le 10-12-2002 à 15:51:14    

quel est l'intérêt d'un array de string pour stocker 1 lettre à chaque fois ?
 
je capte pas ce que tu veux faire en fait...
 
si tu veux la liste des lettres au début de la fonction tu mets Result := '';
puis à la place de
   if(GetDriveType(PChar(Drv))=5) then
   begin
     Result := Drv;
     Exit;
   end;
tu mets
   if(GetDriveType(PChar(Drv))=5) then
   begin
     Result := Result + Drv;
   end;


Message édité par antp le 10-12-2002 à 15:53:31

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 10-12-2002 à 15:52:42    

Exemple : Label1.Caption:=GetCDLabel(GetCDLetter());
 
Je ne reçois que les informations du premier lecteur de CD. J'aimerais pouvoir 'tous' les voir...

Reply

Marsh Posté le 10-12-2002 à 15:52:42   

Reply

Marsh Posté le 10-12-2002 à 15:59:48    

antp a écrit :

quel est l'intérêt d'un array de string pour stocker 1 lettre à chaque fois ?
 
je capte pas ce que tu veux faire en fait...
 
si tu veux la liste des lettres au début de la fonction tu mets Result := '';
puis à la place de
   if(GetDriveType(PChar(Drv))=5) then
   begin
     Result := Drv;
     Exit;
   end;
tu mets
   if(GetDriveType(PChar(Drv))=5) then
   begin
     Result := Result + Drv;
   end;


 
Euh non. Drv sera utilisé pour la prochaine boucle et on aura une donnée erronée. Finalement tout ce que je vais reçevoir c'est 'No Cd Present'

Reply

Marsh Posté le 10-12-2002 à 16:01:25    

bhen oui mais bon après c'est à toi à appeler GetCDLabel pour chacune des lettre contenues dans la chaîne renvoyée par GetCDLetter


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 10-12-2002 à 16:01:46    

:D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed