As far as I can see are you just adding ONE record into your Bufdataset. You have the Append and Post OUTSIDE your loop (and are missing ApplyUpdates).
You should do something like this:
datam.MDprod.Open;
row := WSexc.Worksheet.GetLastRowIndex;
g := 1;
for g := 1 to row do
begin
datam.MDprod.Append; // <--- INSIDE THE LOOP
datam.MDprod.FieldByName('CPP').AsString := WSexc.Worksheet.ReadAsUTF8Text(g, 0);
datam.MDprod.FieldByName('PL_num').AsString := WSexc.Worksheet.ReadAsUTF8Text(g, 21);
datam.MDprod.FieldByName('SO_num').AsString := WSexc.Worksheet.ReadAsUTF8Text(g, 3);
datam.MDprod.FieldByName('TO_num').AsString := WSexc.Worksheet.ReadAsUTF8Text(g, 32);
datam.MDprod.Post; // <--- also inside
datam.MDprod.ApplyUpdates; // <--- applyupdates
DBCPP.Items.Add(datam.MDprod.FieldByName('CPP').AsString);
DBCPP.ReadOnly := True;
end;
//...
datam.MDprod.First;
datam.MDprod.Locate('CPP', DBCPP.Text, []);
//...