Avatar billede kennethv Nybegynder
21. august 2006 - 23:16 Der er 13 kommentarer og
1 løsning

Til HRC

Et lille ekstra spørgsmål til dit svar i en anden tråd:

http://www.eksperten.dk/spm/721758

Jeg er gået lidt væk fra DBRichEdit, jeg var ved at få mavesår af det ikke ville. Så nu har jeg kastet mig over den anden løsning som du gav mig tidligere, men der dukker så et nyt problem op som jeg ikke ved hvordan jeg skal takle og der er:

Jeg har en del DBEdit og nu en udskiftet RichEdit på en form. Jeg har nogle speedbuttons, som er til gemme, insætte, redigere og slette records i databasen. Det spiler helt fint, men hvordan får jeg indholdet af richedit med ind i den record, hvor informationer fra DBEdit også er?

Venlig hilsen og et håb på hurtig svar
Kenneth
Avatar billede martinlind Nybegynder
22. august 2006 - 12:59 #1
MyDataset.Edit;
MyDataset.FieldByName('MyDBFeltNavn').AsString := 'My String';
MyDataSet.Post;

/Martin
Avatar billede kennethv Nybegynder
22. august 2006 - 23:45 #2
Tak for svaret Martin, men et lille spørgsmål. Det du har skrevet er det ikke for at gemme hvad der i DBEdit'erne? Hvis det er så var det ikke mit spørgsmål, men jeg var interesseret i at få hvad der står i min RichEdit ind i samme record som DBEdit'erne.

Idet at jeg bruger følgene procedure til at indsætte og gemme sker der det, at DBEdit'erne bliver gemt, men derefter gemmes indholdet i min RichEdit i en ny record. Det ønsker jeg ikke.
procedure TMainForm1.InsertToolButton3Click(Sender: TObject);
begin
  DBEdit1.Enabled := true;
  DBEdit2.Enabled := true;
  DBEdit3.Enabled := true;
  DBEdit4.Enabled := true;
  ADOTable1.Insert;
end;

procedure TMainForm1.SaveToolButton2Click(Sender: TObject);
var
  MemoryStream : TMemoryStream;
begin
  DBEdit1.Enabled := false;
  DBEdit2.Enabled := false;
  DBEdit3.Enabled := false;
  DBEdit4.Enabled := false;
  RichEdit1.Enabled := false;
  ADOTable1.Post;

{ Det er så her at jeg har et problem idet at når det efterfølgene kører opstår der en record, hvilket jeg gerne vil undgå. }

  MainForm1.ADOConnection1.Open; 
  MemoryStream := TMemoryStream.Create;
  try
    ADOQuery1.SQL.Text := 'insert into MalerDok (Tekst) values(:Tekst)';
    RichEdit1.Lines.SaveToStream(MemoryStream);
    MemoryStream.Seek(0,soFromBeginning);
    ADOQuery1.Parameters.ParamByName('Tekst').LoadFromStream(MemoryStream,ftFmtMemo);
    ADOQuery1.ExecSQL;
  finally
    MemoryStream.Free;
    MainForm1.ADOConnection1.Close;
  end;
end;
Avatar billede martinlind Nybegynder
23. august 2006 - 09:42 #3
!!!! INSERT INTO >>> LAVER EN NY RECORD :)

ADOQuery1.SQL.Text := 'UPDATE MalerDok (Tekst) values(:Tekst) WHERE ID = '+IntToStr(MyID);
Avatar billede kennethv Nybegynder
23. august 2006 - 12:43 #4
Hvad betydr det sidste:

WHERE ID = '+IntToStr(MyID);
Avatar billede kennethv Nybegynder
23. august 2006 - 13:03 #5
undeclared identifier: 'MyID'
Avatar billede martinlind Nybegynder
23. august 2006 - 14:54 #6
ID = "table-key-field" så du kan finde den rigtige record at opdatere :) ved ikke hvad dit keyfield hedder
Avatar billede kennethv Nybegynder
23. august 2006 - 21:49 #7
Ømm, hvordan finder man lige det? Min primær nøgle feltet hedder ID.
Avatar billede martinlind Nybegynder
24. august 2006 - 10:45 #8
Så efter din post kan du lave en ADOTable1.fieldbyname('ID').AsInterger

ADOQuery1.SQL.Text := Format('UPDATE MalerDok (Tekst) values(:Tekst) WHERE ID = %d',[ADOTable1.fieldbyname('ID').AsInterger]);

og smut så ned og køb det IDG Delphi hæfte :0)
Avatar billede kennethv Nybegynder
24. august 2006 - 11:01 #9
Man kan altså ikke få dem mere.
Avatar billede martinlind Nybegynder
24. august 2006 - 12:48 #10
Hmm, så må du ned på det lokale bib. eller Polytekninsk boghandel i Lyngby :)
Avatar billede kennethv Nybegynder
24. august 2006 - 18:40 #11
Nej, det jeg mener er, at jeg har fået af vide fra en boghandler at de ikke bliver lavet mere.

Jeg får en fejl som siger:

Syntax error in UPDATE statement.
Avatar billede martinlind Nybegynder
24. august 2006 - 18:59 #12
Jamen så er der vel noget galt med din SQL tekst, du må jo se hvad der står i den, brug debug, resten af din kode ser fin ud.

"Update table set field = :param where key = :param" sådan ser update syntax'en ud, den kan du finde på google sammen med alle de andre sql commands
Avatar billede kennethv Nybegynder
24. august 2006 - 22:04 #13
Ja, den var ikke rigtig. Den skulle se sådan her ud:

ADOQuery1.SQL.Text := Format('UPDATE MalerDok SET Tekst = :Tekst WHERE  ID = %d',[ADOTable1.fieldbyname('ID').AsInteger]);

Hvis du har lyst til at hjælpe mig med det sidste omkring dette og det er at læse det ind igen. Det virker som om at den bare læser den sidste record uanset hvilken jeg vælger fra Combobox. Point sætter jeg op, hvis interesseret.

Jeg prøver sådan her:

procedure TMalerMainForm1.ComboBox1Select(Sender: TObject);
  var
  MemoryStream : TMemoryStream;
begin
  ADOTable1.Locate('Ordrenr', ComboBox1.Items[ComboBox1.ItemIndex],[loCaseInsensitive]);
  MainForm1.ADOConnection1.Open;
  try
    ADOQuery1.SQL.Text := 'select Tekst from MalerDok where id=(select max(id) from MalerDok)';
    ADOQuery1.Open;
    try
      if not ADOQuery1.Eof then
      begin
        MemoryStream := (ADOQuery1.CreateBlobStream(ADOQuery1.FieldByName('Tekst'),bmRead) as TMemoryStream);
        try
          RichEdit1.Lines.LoadFromStream(MemoryStream);
        finally
          MemoryStream.Free;
        end;
      end;
    finally
      ADOQuery1.Close;
    end;
  finally
    MainForm1.ADOConnection1.Close;
  end;
end;
Avatar billede kennethv Nybegynder
26. august 2006 - 20:12 #14
Det er løst også. Fandt ud af det.
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