Avatar billede janbb Juniormester
19. oktober 2003 - 17:53 Der er 9 kommentarer og
1 løsning

widestring teknik

Har fra delphi.about.com (databasetut. lekt. 10 fundet et adodatabaseeksempel, jeg har 'leget' lidt med - osse undersøgt noget om denne 'widestring' og bl.a. fundet ud at at den kun begrænses af hukommelsen og derfor lettere at bruge for uerfarne selvom der hvistnok er nogen 'fælder'.Imidlertid er det heller ikke let nok (hulk) idet jeg kunne ønske mig: at den ellers letforståelige metode til at sætte tekst ind i strengen ved 'bare' at sætte ' omkring teksten og 'plusse' det jo godt kan bruges til mindre tekststumper, men hvad hvis jeg vil sætte en hel tekstfil ind - kan man det ?.Hvilke tegn er det lige man skal sætte ?.Lægger onclickproceduren i første kommentar (desvære lidt rodet - undskyld :-=))
Avatar billede janbb Juniormester
19. oktober 2003 - 17:53 #1
procedure TForm1.Button1Click(Sender: TObject);
var
  shtml    : widestring;
  htmlfile  : TextFile;
  i        : integer;
  AvailableFields: set of  TFieldType;
begin
AvailableFields:=[ftWideString, ftDate,  ftFloat];
//open query
ADOQuery1.SQL.Text:=Edit2.Text;
ADOQuery1.Open;

// --> create a html page

//html header
  shtml:= '<html> <head> <title>';
  shtml:= shtml + Edit2.Text;
  shtml:= shtml + '</title></head>' + #13#10;
  shtml:= shtml + '<body><BODY BGCOLOR="#AAAACC">' + #13#10;
// shtml:= shtml + 'Table created from query: <i>'
  //        + Edit2.Text + '</i>' + #13#10;

//table header
  shtml:= shtml + '<table border="0" width="100%">' + #13#10;
  shtml:= shtml + '<tr>' + #13#10;
  for i:=0 to AdoQuery1.FieldCount-1 do
  begin
    if ADOQuery1.Fields[i].DataType in AvailableFields  then
    begin
      shtml:= shtml + '<td>';
      shtml:= shtml +
              '<b>' +
              ADOQuery1.Fields[i].DisplayName +
              '</b>';
      shtml:= shtml + '</td>' + #13#10;
    end;
  end;{for}
  shtml:= shtml + '</tr>' + #13#10;

//table body
  while not adoquery1.Eof do
  begin
    shtml:= shtml + '<tr>' + #13#10;
    for i:=0 to AdoQuery1.FieldCount-1 do
    begin
      if ADOQuery1.Fields[i].DataType in AvailableFields then
      begin
        shtml:= shtml + '<td>';
        shtml:= shtml + ADOQuery1.Fields[i].AsString;
        shtml:= shtml + '</td>' + #13#10;
      end;
    end;{for}
    shtml:= shtml + '</tr>' + #13#10;
    ADOQuery1.Next;
  end;{while}
  shtml:= shtml + '</table>' + #13#10;

  shtml:= shtml + '</body></html>';
// --> assign to memo
  Memo1.Text := shtml;

// --> save in a htm file

AssignFile(htmlfile, 'test.htm');
//ChangeFileExt(Application.ExeName,'.htm'));
Rewrite(htmlfile);
//WriteLn( htmfile,shtml);
CloseFile(htmlfile);


// --> browse to the file
//WebBrowser1.Navigate(aboutproject1.htm);
WebBrowser1.Navigate(ChangeFileExt(
    Application.ExeName,'.htm'));
end;{Button1.OnClick}
Avatar billede janbb Juniormester
19. oktober 2003 - 18:39 #2
Kan man f.x. 'bare' smide den ønskede txt ind i en Memo2 og så skrive:

shtml:= shtml
        + Memo2.Text + #13#10;

Det prøver jeg lige ...
Avatar billede stoney Nybegynder
19. oktober 2003 - 19:34 #3
Du skal sætte et </br> efter hver linie i dit memofelt.

din_variabel := StringReplace(det_memo_felt.text, #13#10, '</br', [rfReplaceAll]);

herefter indsætter din_variabel hvor du vil have udskrevet din html kode

Stoney
Avatar billede stoney Nybegynder
19. oktober 2003 - 19:36 #4
din_variabel := StringReplace(det_memo_felt.text, #13#10, '</br>', [rfReplaceAll]);

Ups, der manglede en >

Stoney
Avatar billede janbb Juniormester
20. oktober 2003 - 03:37 #5
Stoney: Med 'din' metode (hvis jeg forstår det ret) - kan jeg altså (forhåbentlig) oven i købet så osse redigere i memoen.Det lyder godt.Jeg prøver det lige.Jeg har foreløbig sat memoerne ind efter den metode jeg selv foreslog - og det virker, men det ville da være helt fint, hvis man kunne redigere i memoen og gemme ændringerne, men det kræver måske lidt flere knapper (savememo - i den stil).Jeg kigger lidt på det.
Vældig 'sjov' måde at lave websider på: Man har en beg. (Memo1) og noget derimellem (linier lagt ind enkeltvis i database, der udkommer som memo2) og en slutning (memo3).Så kan man redigere i sin database og checke output i een arbejdsgang.
Avatar billede janbb Juniormester
20. oktober 2003 - 03:41 #6
Kan du iøvrigt bekræfte min mistanke om 'fælder' ved widestring: noget med at hukommelsen ikke laver stringente aftryk - og jeg kan så tænke mig man kommer i problemer hvis man kører flere programmer på een gang ?.
Avatar billede janbb Juniormester
20. oktober 2003 - 06:04 #7
Er iøvrigt knap så begejstrer for programmet mere: brugte den alfabetiske funktion i indexfield til at navigere mine linier i databasens tabel, men den er åbenbart gået tabt ?.Har importeret en Paradox-tabel i en Accesdatabase.Ved du om det er noget der kan reetableres ?.jeg skal maaske tilbage til den 'sure' Acces og kigge (øv øv).
Avatar billede janbb Juniormester
20. oktober 2003 - 16:51 #8
Stoney: Jeg tror ikke dit svar er det jeg ledte efter (den udskifter jo hele variablen ?), men du er jo kommet med så mange geniale løsninger tidl. så du har til fulde fortjent disse points osse.
Avatar billede stoney Nybegynder
20. oktober 2003 - 21:13 #9
Uden at have testet vil jeg mene du skal ændre

shtml:= shtml + ADOQuery1.Fields[i].AsString;

til

shtml:= shtml+ (StringReplace(ADOQuery1.Fields[i].AsString, #13#10, '</br>', [rfReplaceAll]));

Stoney
Avatar billede janbb Juniormester
21. oktober 2003 - 07:42 #10
Ja, je må se at få syntaksen mere korrect inden der går for meget galt.Var ved at opgive p.g.a. ovennævnte indexproblemer, men de løste sig vhj af tilføjelsen ORDER BY i SQL sætningen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester