Hola.
Un DBGrid está asociado a los datos de un DataSet no de dos. Por otro lado, parece que necesitas una cantidad indeterminada de campos por registro: (cod_articulo1, cant..., cod_articulo_n, can_n), es decir que no conocés a priori cuantos campos serán. Lo que me hace descartar el
uso de un DataSet creado en tiempo de diseño.
Algo que se me ocurre es crear un DataSet en tiempo de ejecución, cuyos registros sean la suma de los campos maestro+detalle:
nrof, fecha, cliente, valortotal, nrof, cod_articulo y
cantidad.
Los 4 primeros valores los obtenes de 'ventas' y los demás, al estar en relación maestro-detalle simplemente recorriendo la tabla 'detalle ventas'
y agregando los 'n' campos.
El DBGrid estaría asociado a ese DataSet (posiblemente temporal) y por lo tanto mostraría los 'n' campos.
Esto si no entendí mál lo que buscas hacer...
Saludos.